次の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 アノテーションを使用する必要がある(2 番目のメソッドの場合) と言っています。PMD は正規表現 (実際には XPath です) を使用して、違反しているルールを判断していることを知っています...そのため、これは単なる「誤検出」警告であると考える傾向があります。とにかく、私は何か間違ったことをしているのか知りたいです。(テストされるメソッドよりも4倍長いテストを書くことから離れて:)
これに似た質問を探しているときに、パラメーター化されたテストと呼ばれるものを見つけました...しかし、それはもっと大きなシナリオ向けのもののようですね。