Assert.assertTrue(true)を使うのが良いか悪いのですか。 JUnitテストのAssert.fail()とその理由
@Test(expected = Exception.class)というルールもありますが、テスト済みのメソッドで発生させることができる複数の例外を持つことができます。これはオプションである可能性があります。ゼロ、一つ以上の例外を発生させることができあなたの試験方法(例では、1つだけ、それを簡単にするために)、あなたは、コールがそうは例外は発生しませんしなければならないOKであった場合をテストしたい:
ユースケースはこれですcatchブロックに入ると、Assert.fail()が呼び出されます。例外を発生させる必要がある場合はテストケースが必要なので、catchブロックをコールします。Assert.assertTrue(true);言うまでもなく、「これは私が欲しいものです」そして、テストから、あなたが望むように実際に動作する場合、テストが失敗したときとテストを実行するときの1つのテスト方法で見ることができます。
質問です:この良いか悪い習慣のですか?どうして?
Assert.assertTrue(true)を使用しています。 Assert.fail()をアサートします。 JUnitテストの良い練習ですか?
public void fooMethod(boolean paramenter) {
if(false) {
throw new Exception();
}
}
@Test
public void testFooMethod() {
try {
myTestedClassMock.fooMethod(true); //should not raise exception
} catch(Exception e) {
Assert.fail();
}
try {
myTestedClassMock.fooMethod(false); //should raise exception
} catch (Exception e) {
Assert.assertTrue(true);
}
}
これはプログラマーズ・セーズのほうが良いかもしれませんが、私は真実を主張する点を見ることはできません。「期待されている」というコメントを書くことができます。 – stripybadger
私は個人的には悪い習慣と考えています。あなたのユースケースでは、2つのテストメソッドを作成し、適切に名前を付けることができます。 2つの例外がある場合は、3つのテスト方法があると思います。そのようにすれば、より多くのテストメソッドを記述する必要がありますが、テストコードを大幅に簡素化することができます。また、メソッド名を使用して意図をよりうまく伝えることもできます。 – Michal
'ExpectedException'クラスの使い方を学んでください。これは、あなたが記述したテクニックと、答えの1つに与えられたアノテーションベースのテクニックの両方に取って代わるものです。 –