混合参数化和程序化单元测试
blend parameterized and programmatic unit tests
使用 JUnit,您可以使用 @RunWith(Parameterized.class)
提供一组参数以传递给测试构造函数,然后 运行 对每个对象进行测试。
我试图将尽可能多的测试逻辑移动到数据中,但有些测试不容易转换为数据驱动测试。有没有办法使用 JUnit 的 Parameterized
运行ner 来 运行 一些带参数的测试,然后还添加非数据驱动的测试,这些测试不是 运行 重复的每个测试对象构建?
我的解决方法是创建一个 class 并将程序化和数据驱动测试放在两个单独的子 class 中。子 class 必须是静态的,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
}
}
如果这对您来说还不够,您肯定可以找到其他支持这两种测试的跑步者。
使用 JUnit,您可以使用 @RunWith(Parameterized.class)
提供一组参数以传递给测试构造函数,然后 运行 对每个对象进行测试。
我试图将尽可能多的测试逻辑移动到数据中,但有些测试不容易转换为数据驱动测试。有没有办法使用 JUnit 的 Parameterized
运行ner 来 运行 一些带参数的测试,然后还添加非数据驱动的测试,这些测试不是 运行 重复的每个测试对象构建?
我的解决方法是创建一个 class 并将程序化和数据驱动测试放在两个单独的子 class 中。子 class 必须是静态的,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
}
}
如果这对您来说还不够,您肯定可以找到其他支持这两种测试的跑步者。