我有以下 JUnit 测试。我正在测试的方法非常简单,它只接收一个数字并返回一个带有除数的列表。我不想多次重复测试代码,所以我创建了一个辅助方法,testDivisorsAux
:
@Test
public final void testDivisors() {
testDivisorsAux(1, new int[] { 1 });
testDivisorsAux(6, new int[] { 1, 2, 3, 6 });
testDivisorsAux(0, new int[] { });
...
}
private final void testDivisorsAux(final int number, final int[] expected) {
List<Integer> divisors = Util.divisors(number);
assertSame(divisors.size(), expected.length);
for (int i : expected) {
assertTrue(divisors.contains(i));
}
}
一切正常,我只是想知道......这是一种不好的做法吗?我应该以不同的方式编写测试吗?也许将所有代码保留在“@Test
方法”中?
PMD 告诉我JUnit 测试应该包括 assert() 或 fail()(对于第一种方法),而执行测试的 JUnit 4 测试应该使用 @Test 注释(对于第二种方法)。我知道 PMD 仅使用正则表达式(嗯,实际上是 XPath)来确定我正在破坏哪些规则......所以我倾向于认为这只是一个“误报”警告。但无论如何,我想知道我是否做错了什么。(除了编写测试的时间比被测试的方法长 4 倍之外:)
当我在寻找与此类似的问题时,我发现了一种叫做参数化测试的东西……但它似乎是面向更大场景的东西,不是吗?