3

絶対に失敗しない単体テスト (JUnit で作成) を見つけたいです。つまり、次のようなテスト

try {
// call some methods, but no assertions
} catch(Throwable e) {
// do nothing
}

これらのテストは、コードの問題を決して見つけられないため、基本的に役に立ちません。各(有効な)単体テストを失敗させる方法はありますか?たとえば、assert メソッドを呼び出すたびに例外がスローされますか? その場合、まだ緑色のままのテストは役に立ちません。

4

6 に答える 6

1

アサーションを飲み込む、および/またはアサーションを行わないコードを追跡したいと思っていると思います。これを行う最も簡単な方法は、独自の JUnit JAR を構築し、元のAssertクラスを独自のものに置き換えることです。

これは、アサーションが偽であるケースを見つけるのに役立ちません。また、開発者がわざわざアサートしない環境にいる場合は、偽のアサーションもある可能性があります。また、 でマークされたテストを見つけるのにも役立ちません@Ignoreが、grepがそれを行います。

于 2012-10-10T14:09:05.927 に答える
1

すべてのメソッドのすべての呼び出しを失敗させようとしている場合、どうすればよいかわかりません。@JonSkeet の Jester の提案は、あなたが望むものに近いかもしれません。 Assert

ただし、常に失敗する メソッドを見つけようとしている場合は、それが必要です。呼び出し時にスローします。AssertAssert.failAssertionError

于 2012-10-10T13:50:26.650 に答える
1

ええと、1 つのアプローチは、ミューテーションテストを実装するJesterのようなものを使用することです。それはあなたが提案した方法とはまったく異なりますが、製品コードをいくら変更しても合格するテストを見つけようとしますが、ランダムに変更してテストを再実行します。

于 2012-10-10T13:51:12.887 に答える
0

これをデフォルトのテスト実装として追加します。

Assert.assertTrue(false);

この方法で開始されるすべてのテストは、その行を適切なものに置き換えるまで失敗します。

于 2012-10-10T13:50:48.493 に答える
0

あなたが何を望んでいるのかはわかりませんが、ユニットはすでに書かれていることを理解しているので、私が想像できる唯一の方法はアサートメソッドをオーバーライドすることですが、それでもユニットコードを少し変更する必要があります.

于 2012-10-10T13:51:22.637 に答える
0

次の構成を使用して、JUnit ソースに対してCheckStyleを実行します。

<module name="IllegalCatch">
    <property name="illegalClassNames" value="java.lang.Throwable, java.lang.Error, java.lang.AssertionError"/>
</module>
于 2012-10-10T13:57:26.577 に答える