使用JUnit,您可以使用@RunWith(Parameterized.class)
來提供一組參數傳遞給測試構造函數,然後對每個對象運行測試。混合參數化和程序化單元測試
我試圖將盡可能多的測試邏輯移入數據中,但有一些測試不會輕易轉換爲數據驅動的測試。有沒有辦法使用JUnit的Parameterized
runner來運行一些帶參數的測試,然後添加非數據驅動的測試,這些測試對於每個測試對象構造都不會重複運行?
使用JUnit,您可以使用@RunWith(Parameterized.class)
來提供一組參數傳遞給測試構造函數,然後對每個對象運行測試。混合參數化和程序化單元測試
我試圖將盡可能多的測試邏輯移入數據中,但有一些測試不會輕易轉換爲數據驅動的測試。有沒有辦法使用JUnit的Parameterized
runner來運行一些帶參數的測試,然後添加非數據驅動的測試,這些測試對於每個測試對象構造都不會重複運行?
我的解決方法是創建一個類,並將編程和數據驅動的測試放在兩個單獨的子類中。 JUnit運行測試時,子類必須是靜態的。這是一個骨架:
@RunWith(Enclosed.class) // needed for working well with Ant
public class MyClassTests {
public static class Programmatic {
@Test
public void myTest(){
// test something here
}
}
@RunWith(Parameterized.class)
public static class DataDriven {
@Parameters
public static Collection<Object[]> getParams() {
return Collections.emptyList();
}
private String data;
public DataDriven(String testName, String data){
this.data = data;
}
@Test
public void test() throws AnalyzeExceptionEN{
// test data string here
}
}
}
一種方法是使用Junit的Enclosed
跑步者。它非常冗長,但也非常強大。它允許你在一個文件中組合多個不同的跑步者。
其他選項是使用自定義junit亞軍。肯定zohhak支持tests with parameters and without。小提取物:
@RunWith(ZohhakRunner.class)
public class CoercingTest {
@TestWith("ONE_OF_ENUM_VALUES")
public void should_coerce_enum(SampleEnum param) {
assertThat(param).isEqualTo(SampleEnum.ONE_OF_ENUM_VALUES);
}
@Test
public void should_run_standard_junit_test() {
//this will also work
}
}
如果它對你來說還不夠,肯定你可以找到其他支持這兩種測試的跑步者。
有2個測試類有什麼問題?一個用於參數化,一個用於非參數化? – dkatzel
我寧願在一次測試中爲一個類進行測試,而不是創建「MyClassDataDrivenTest」和「MyClassProgrammaticTest」。 –