6

次の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倍長いテストを書くことから離れて:)

これに似た質問を探しているときに、パラメーター化されたテストと呼ばれるものを見つけました...しかし、それはもっと大きなシナリオ向けのもののようですね。

4

2 に答える 2

5

個人的には、これを行うのは良い習慣だと思います。行き過ぎて大量のコードを作成してテストを実行することには、わずかな危険があります。この場合、テスト対象の設計を再考する必要があります。テストをテストするためにテストを作成する必要はありませんが、提供する例は問題ないようで、テストケースがはるかに単純であることを意味します。

私は PMD を使用したことがなく、個人的にはこれらの警告を無視するように構成しようとします。彼らがあなたを心配している場合は、コードを変更してそれらを取り除くことができるかもしれません. 私の推測では、ヘルパー メソッドが単語 test で始まるため、2 番目の警告が表示されました。junit3 では、test で始まるすべてのメソッドがテストです。メソッド testDivisorsAux の名前を assertDivisors に変更しない理由 - assert で始まるメソッドを使用すると、最初の警告にも役立つ可能性があります。

于 2010-09-06T20:55:06.690 に答える