这是东西:jUnit:动态测试生成
當(dāng)您需要在許多不同的輸入值或配置上運(yùn)行同一組測(cè)試時(shí),動(dòng)態(tài)測(cè)試生成很有用。 可以使用參數(shù)化測(cè)試或使用理論來(lái)實(shí)現(xiàn)。
當(dāng)您有大量數(shù)據(jù)用作參數(shù)并想對(duì)所有組合進(jìn)行測(cè)試時(shí),這些理論非常有用。 您得到的控制較少,但是您不必自己編寫合并和迭代的代碼。 關(guān)于理論如何工作的基礎(chǔ)知識(shí)在Java代碼極客 (最初出現(xiàn)在Java出現(xiàn)日歷 )上進(jìn)行了解釋,因此,本文重點(diǎn)關(guān)注參數(shù)化測(cè)試。
當(dāng)您需要對(duì)輸入值進(jìn)行良好控制時(shí),例如,帶有用作輸入的文件的目錄或有意義的參數(shù)組合列表,則參數(shù)化測(cè)試會(huì)更好。
參數(shù)化測(cè)試
參數(shù)化測(cè)試是一種測(cè)試用例,能夠接受參數(shù)以及您希望其運(yùn)行的所有參數(shù)組合的列表。 JUnit遍歷參數(shù)列表,使用每個(gè)參數(shù)初始化測(cè)試用例,然后運(yùn)行其所有測(cè)試方法。
然后,GUI和Maven運(yùn)行程序都將每個(gè)參數(shù)化的測(cè)試運(yùn)行解釋為單獨(dú)的測(cè)試。 如果其中一些失敗,則立即清楚哪些失敗了,有多少失敗了。
示例用例
Less4j對(duì)于css編譯器來(lái)說(shuō)較少,因此其每個(gè)測(cè)試都由一個(gè)較少輸入的文件和一個(gè)預(yù)期CSS文件定義。 編譯器在輸入文件上運(yùn)行,并將其輸出與預(yù)期CSS進(jìn)行比較。 如果它們匹配,則測(cè)試通過。
所有.less文件都存儲(chǔ)在目錄中。 參數(shù)化的測(cè)試用例讀取該目錄,并為每個(gè)文件創(chuàng)建一個(gè)jUnit測(cè)試。 因此,我們可以通過創(chuàng)建新的.less和.css添加新測(cè)試,通過“全部運(yùn)行”按鈕運(yùn)行測(cè)試,并在所有報(bào)告中查看新測(cè)試。
如何使用它
參數(shù)化的測(cè)試用例必須具有以下內(nèi)容:
- @RunWith(Parameterized.class)類注釋,
- 接受測(cè)試用例參數(shù)的構(gòu)造函數(shù),
- 帶有@Parameters注釋的靜態(tài)方法以生成參數(shù),
- 在構(gòu)造函數(shù)中提供的參數(shù)上運(yùn)行的測(cè)試方法。
建設(shè)者
參數(shù)化的構(gòu)造函數(shù)必須至少具有一個(gè)參數(shù)。 例如,編譯器測(cè)試用例可以將較少的輸入作為第一個(gè)參數(shù),而將預(yù)期的已編譯css作為第二個(gè)參數(shù)。 第三個(gè)參數(shù)name將被忽略,稍后將進(jìn)行說(shuō)明:
@RunWith(Parameterized.class) public class ParametrizedTest {public ParametrizedTest(String less, String expectedCss, String name) {this.less = less;this.expectedCss = expectedCss;}}參量
生成參數(shù)的靜態(tài)方法必須返回Iterable接口的實(shí)現(xiàn)。 迭代器返回包含參數(shù)集的數(shù)組。 每個(gè)數(shù)組用于創(chuàng)建一個(gè)測(cè)試用例實(shí)例,其中的對(duì)象用作構(gòu)造函數(shù)參數(shù)。
例如,以下方法返回兩個(gè)數(shù)組,從而導(dǎo)致兩個(gè)測(cè)試用例實(shí)例:
@Parameters(name="Name: {2}") public static Iterable<Object[]> generateParameters() {List<Object[]> result = new ArrayList<Object[]>();result.add(new Object[] {"less", "css", "pass"});result.add(new Object[] {"less", "error", "fail"});return result; }name注釋參數(shù)是可選的。 其值將在GUI或maven報(bào)告中顯示為測(cè)試用例名稱。 {n}是第n個(gè)數(shù)組值的占位符。 它們從0開始索引,因此第一個(gè)測(cè)試用例將被命名為Name: pass ,第二個(gè)測(cè)試用例將被命名為Name: fail 。
測(cè)試方法
參數(shù)化的測(cè)試用例可以具有任意數(shù)量的測(cè)試,并且必須使用@Test批注進(jìn)行批注:
@Test public void testCss() { //dummy test methodString actualCss = compile(less);assertEquals(expectedCss, actualCss); }@Test public void testSourceMap() { //another test methodString actualCss = compile(less);assertEquals(expectedCss, actualCss); }private String compile(String less) { //dummy compile methodreturn "css"; }輸出量
如果運(yùn)行上面的測(cè)試類,則JUnit視圖將顯示以下結(jié)構(gòu):
[F] com.github.sommeri.jUnit4Examples.ParametrizedTest [ ] |-- [Name: pass] [ ] |---------------- testCss[Name: pass] [ ] |---------------- testSourceMap[Name: pass] [F] |-- [Name: fail] [F] |---------------- testCss[Name: fail] [F] |---------------- testSourceMap[Name: fail]完整的測(cè)試案例
@RunWith(Parameterized.class) public class ParametrizedTest {private String less;private String expectedCss;public ParametrizedTest(String less, String expectedCss, String name) {this.less = less;this.expectedCss = expectedCss;}@Parameters(name="Name: {2}")public static Iterable<Object[]> generateParameters() {List<Object[]> result = new ArrayList<Object[]>();result.add(new Object[] {"less", "css", "pass"});result.add(new Object[] {"less", "error", "fail"});return result;}@Testpublic void testCss() {String actualCss = compile(less);assertEquals(expectedCss, actualCss);}@Testpublic void testSourceMap() {String actualCss = compile(less);assertEquals(expectedCss, actualCss);}//dummy compile methodprivate String compile(String less) {return "css"; } }翻譯自: https://www.javacodegeeks.com/2014/08/this-is-stuff-junit-dynamic-tests-generation.html
總結(jié)
以上是生活随笔為你收集整理的这是东西:jUnit:动态测试生成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何网络宣传 网络宣传的方法
- 下一篇: ChoiceFormat:数字范围格式