xml參數化、自動化單元測試設計
最近在做單元測試相關的東西,有一些想法,也研究實現了一部分,和大家分享。
單元測試的用例要和代碼分離,采用xml的格式。
每一個單元測試類對應一個xml,采用如下格式:
<class name="com.xxx.service.test.DemoServiceTest"> <beforeClass></beforeClass> <afterClass></afterClass> <method name="testGetToken"> <before></before> <after></after> <!--對一個方法可能有多個測試用例 --> <!-- 輸入參數類型錯誤 --> <case name="err_001"> <!-- 方法參數可能有多個 --> <request> <param type="com.xxxi.domain.request.TokenRequest"> <merchantId>33333</merchantId> <signType>MD5</signType> <businessType>1001</businessType> <outTradeNo>4222222222</outTradeNo> </param> </request> <!-- 方法期望返回值 --> <response type="com.xxx.domain.response.TokenResponse"> <responseCode>0</responseCode> <tradeNo>831</tradeNo> </response> </case> <case name="case_002"> <request> <param type="com.xxx.request.TokenRequest"> <merchantId>33333</merchantId> <signType>MD5</signType> <businessType>1001</businessType> <outTradeNo>4222222222</outTradeNo> </param> </request> <!-- 方法期望返回值 --> <response type="com.elong.pb.payment.api.domain.response.TokenResponse"> <responseCode>0</responseCode> <tradeNo>831</tradeNo> </response> </case> </method> </class> |
根節點為單元測試類的類名
類下面是多個<method>節點
每個<method>節點下有多個<case>節點
每個<case>節點下有<request>和<response>分別為輸入參數和期望返回結果
輸入參數可能有多個,故<request>節點下可能有多個<param>節點
以上是對xml設計的介紹。
下面講實現。
通過一些實際使用,發現JUnit對參數化的支持非常不好。對于參數化測試有很大的局限性,參數必須定義成類的成員變量,這樣對于一個類中有多個測試方法造成很大的不便。JUnit的參數化測試只適合一個類只有一個測試方法的情況。
于是我用了TestNG,TestNG也是一個(但并不僅僅是)單元測試框架,與JUnit類似,有類似的生命周期和類似的用法。但TestNG對參數化測試支持的很好:
public class TestNGTest { @DataProvider(name = "test2") public Object[][] createTest2() { return new Object[][] { { "input1", "expect" }, { "input2", "expect2" } }; } } @Test(dataProvider = "test2") public void test2(String input, String expect) { System.err.println(input+" "+expect); } } |
TestNG的每個測試方法是可以有參數的,有一個數據提供者(dataProvider注解),dataProvider和每個test是一一對應的關系。這樣是方法級別的(而JUnit是類級別)
DataProvider會返回一個二維數組。剩下的事情就是如何讀取解析上面的xml,并生成二維數組返回了。
(好像TestNG也有一個xml配置,配置DataProvider,但感覺不怎么樣,可能只支持簡單類型,不利于自己定制)
對web controller的測試也與之類似,springmvc有mockMvc,在此不過多介紹了。
以上。
posted on 2014-02-27 10:11 順其自然EVO 閱讀(231) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄