Geb JUnit4自动生成测试

时间:2016-03-24 14:16:53

标签: testing groovy junit4 geb

是否可以生成测试并运行它们?

我有例如我想检查的URL列表是否指向404页面和其他一些测试。我不想为每个链接创建一个单独的测试。那将是很多工作。

如果不可能,是否可以从测试指向另一个测试,如果另一个测试失败,那么第一个测试是否会继续?

对于我的测试,我使用Groovy和Gebish,Gradle和JUnit4。

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是parameterized测试,而不是生成的测试。如果我理解正确,您希望针对许多不同的事情运行相同的测试。

在参数化测试中,您可以通过声明一个返回数据的静态方法,然后告诉JUnit使用Parameterized运行器来运行测试。然后使用参数作为测试数据实例化每个测试类,测试方法可以访问该测试数据。

@RunWith(Parameterized.class)
public class FibonacciTest {
    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] {     
                 { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }  
           });
    }

    private int fInput;
    private int fExpected;

    public FibonacciTest(int input, int expected) {
        fInput= input;
        fExpected= expected;
    }

    @Test
    public void test() {
        assertEquals(fExpected, Fibonacci.compute(fInput));
    }
}

另一种方法是theories。根据理论,您将测试数据嵌​​入到测试类中,作为使用@Datapoint注释的不同静态字段,并为每个数据点重复调用每个测试方法,并将特定数据点作为参数传递。再一次,你有一个特殊的跑步者来实现它......

@RunWith(Theories.class)
public class UserTest {
    @DataPoint
    public static String GOOD_USERNAME = "optimus";
    @DataPoint
    public static String USERNAME_WITH_SLASH = "optimus/prime";

    @Theory
    public void filenameIncludesUsername(String username) {
        assumeThat(username, not(containsString("/")));
        assertThat(new User(username).configFileName(), containsString(username));
    }
}