老大給了這麼個任務,搭建乙個自動測試平台,他希望的效果是,在改動**之後,可以一鍵進行測試,想想看,這個東西是很有意義的,總不能改動一點**,就要從頁面上重新走遍回歸測試吧?太傻了。於是調研了一些spring的測試模組。
spring的測試模組主要存放在org.springframework.test包下,它包括了整合測試和單元測試,這裡我只處理了整合測試,原因有幾點:
處理起來簡單,在構造http請求的時候都是構造字串,不會存在構造物件的問題(但是最後還是遇到了,在設定session的過程中)
可以走完所有流程,從前端的filter、servlet一直到最後響應輸出都可以測試到。
spring整合了強大的mock物件,包括了mockhttprequest\response\session等等,並且在request中還實現了諸如設定字符集、設定content內容,構造url等等等。
框架的核心是通過解析xml檔案,並利用反射機制構造mock請求。主體類非常簡單:
}//新增引數,構造form表單資料
if(parameter != null)
return;
}//獲取content資料
if(content != null)
}/**
* 檢視是否需要將輸出重定向,將輸出結果輸出到檔案中
*@param config
*@throws ioexception
*/private
void
redirectpath(testclass config) throws ioexception
}解析配置檔案是工作量較大的地方,首先讀取框架的配置檔案,框架的配置檔案還比較簡單:
config>處理xml檔案的主要類
public
class
configparser
} catch (exception e)
return testclasses;
}/**
* 檢視是否需要將輸出重定向,將輸出結果輸出到檔案中
*@param config
*@throws ioexception
*/private
void
redirectpath(mainconfig config) throws ioexception
}
<?xml version="1.0" encoding="utf-8"?>
redirect="">
name="/get_card_info.do">
name="abcd"
value="dfjksajdfklas"/>
name="eqaz"
value="sdfasdfsadf"/>
template>
name="popli"
value="asdfasdfjk" />
name="qwert"
value="qwerty"/>
parameter>
name="name"
value="a" />
name="age"
value="18" />
array>
name="name"
value="b" />
name="age"
value="18" />
array>
content>
name="bound"
value="com.dacas.testcase.bound" />
session>
url>
test>
然後剩下的過程就是解析了,解析完成之後,通過在testhandler中執行run as junit進行測試。 spring單元測試使用
開發過程中單元測試是必不可少的,下面就來說一下spring單元測試的使用。很簡單,乙個示例就很清楚了。以下為源 示例 package com.cinyi.user import org.junit.test import org.junit.runner.runwith import org.spr...
spring使用junit單元測試
spring整合junit的配置 1 pom.xml匯入spring整合junit的jar 座標 2 使用junit提供的乙個註解把原有的main方法替換了,替換成spring提供的 runwith 3 告知spring的執行器,spring和ioc建立是基於xml還是註解的,並且說明位置 cont...
一 Spring原始碼閱讀環境搭建及測試
由於github比較慢,所以這裡選擇使用gitee上的spring倉庫 可以看到,這裡需要的gradle版本為6.7.1。然後在idea中配置gradle。直接從gitee拉取 等待gradle構建專案,在漫長的等待之後,我們可以看到spring的原始碼是長這樣的 巨多的模組不禁讓人膽寒。直接使用i...