如何通过一个单元测试来测试多个.java文件(以不同的方式实现相同的方法)? 例如,我有一个文件夹,其中包含不同的.java文件(或具有相同名称的.java文件的不同文件夹),我该如何选择所有文件来运行它? 现在,我需要选择它们中的每一个,并将其移动到与单元测试相同的文件夹中并运行它。 谢谢。
编辑:我想我还不够清楚,所以我会举更多的例子:
我有文件aa.java和bb.java,它们都具有“ static public int fibonacci(int x)”方法,我想创建一个单元测试,它将使用aa和bb方法并查看它们是否有效正确(assertEquals(结果,预期))。 附言我只有两个文件,而且使用相同的方法。
答案 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()
以及每种小部件的子类。仍然会得到多个类,但是您不会重复测试用例,它使您可以有组织地编写其他特定于实现的测试。