如何使用同一个junit测试多个Java文件?

时间:2019-05-24 17:52:06

标签: java testing junit

如何通过一个单元测试来测试多个.java文件(以不同的方式实现相同的方法)? 例如,我有一个文件夹,其中包含不同的.java文件(或具有相同名称的.java文件的不同文件夹),我该如何选择所有文件来运行它? 现在,我需要选择它们中的每一个,并将其移动到与单元测试相同的文件夹中并运行它。 谢谢。

编辑:我想我还不够清楚,所以我会举更多的例子:

我有文件aa.java和bb.java,它们都具有“ static public int fibonacci(int x)”方法,我想创建一个单元测试,它将使用aa和bb方法并查看它们是否有效正确(assertEquals(结果,预期))。 附言我只有两个文件,而且使用相同的方法。

2 个答案:

答案 0 :(得分:1)

假设您要遵守DRY,请编写实用程序方法进行测试,并进行单元测试。

例如

private static void assertFibonacci(IntUnaryOperator op) {
    int n = 5;
    int expected = 8;
    // or a loop of values, whatever
    assert op.applyAsInt(n) == expected;
}

然后在您的单元测试中:

@Test
public void testX() {
    assertFibonacci(new aa()::fibonacci);
    assertFibonacci(new bb()::fibonacci);
}

或者更好的方法是使用单独的测试方法,因此每种方法中的错误都应分别报告:

@Test
public void testAA() {
    assertFibonacci(new aa()::fibonacci);
}

@Test
public void testBB() {
    assertFibonacci(new bb()::fibonacci);
}

答案 1 :(得分:0)

运行在JUnit之上的Spock Framework比普通的JUnit或TestNG对您想要的参数化测试提供更好的支持。

如果不能使用Spock,则可以使用JUnit Parameterized并提供每个类的实例作为数据集,或者(我的建议)以抽象的形式编写所有常见的单元测试。类WidgetTests和方法protected abstract Widget getInstance()以及每种小部件的子类。仍然会得到多个类,但是您不会重复测试用例,它使您可以有组织地编写其他特定于实现的测试。