私は主力製品の単体テストを書いていますが、懸念事項が 1 つあります。差別化の方法です。
- テストがうまくいかなかったために失敗したテスト (たとえば、バグが見つかり、それに対する非回帰テスト)
- テストの別の予期しない部分が失敗したために失敗したテスト (テストが間違っているか、未知のバグが発生したため)
最初のものには確かにjUnit Assertフレームワークがありますが、2番目のものには何がありますか?
例: 私の単体テストでは、c() が MyException をスローしないことをテストしていますが、c() を実行するには、最初に a() を実行し、次に b() を実行する必要があります。どちらも MyException() をスローできるため、次のように記述します。
@Test
public void testC() {
a();
Object forC = b();
try {
c(forC);
} catch (MyException e) {
Assert.fail("....");
}
}
ただし、a または b によってスローされる可能性のある MyException を処理し、forC が null であってはならないという事実も処理する必要があります。これを行う最善の方法は何ですか?
- a または b と Assert.fail によってスローされた MyException をキャッチしますが、a と b はこのテストではテストされないため、失敗したときにテスト失敗としてマークされるべきではありません。この時点では a();b(); ではなく b();a() を実行する必要があるため、後で失敗する可能性があります。
- testC が MyException をスローすると、テストは "MyException" で失敗しますが、MyException はテストが間違って記述されていることを通知しないため、これは誤解を招きます。すべてのテストは、それぞれ独自の例外で失敗します。この場合、forC が null の場合は NullPointerException のようなものもスローする必要がありますが、これにもセマンティックはありません。
- a および b によってスローされた MyException をキャッチして、TestCorruptedException のように、テストが間違っている可能性があることを示す例外にラップします。しかし、jUnitでそのような例外を見つけることができなかったため、jUnitではそのように認識されませんでした(それは私にとっては問題ありません)。また、もちろん複数のモジュール、プロジェクトなどに分割されているすべての単体テストからこの例外を知る必要があります...したがって、これは実行可能ですが、依存関係が追加されます。
この問題の解決策は何ですか? 私はおそらく2番目に行くでしょうが、上で説明したように満足していません.