1. ホーム
  2. java

[解決済み] JUnit4 fail()が来たけどpass()はどこ?

2023-04-25 19:14:18

質問

ある fail() というメソッドがJUnit4ライブラリにあります。私はこれを気に入っているのですが pass() メソッドがありません。なぜでしょうか?

私は assertTrue(true) を使うことができることがわかりましたが、まだ非論理的なようです。

@Test
 public void testSetterForeignWord(){
  try {
   card.setForeignWord("");
   fail();
  } catch (IncorrectArgumentForSetter ex){
  }

 // assertTrue(true);
 }

どのように解決するのですか?

テストが例外を投げない限り、テストは成功します。 @Test アノテーションが期待される例外を指定しない限り、テストは通過します。私が思うに pass() が常に通過したとみなす特別な例外を投げて、 テストを短絡させることもできますが、それでは通常のテストの設計 (成功を仮定してアサーションが失敗したときだけ失敗する) に反してしまいますし、 もし人々が pass() を使うのが望ましいという考えが広まれば、 (例外を生成するためのオーバーヘッドにより) 大きなテスト群の速度が著しく低下してしまうことでしょう。失敗するテストが普通であってはならないので、そのオーバーヘッドがあることは大したことではありません。

あなたの例はこのように書き換えることができることに注意してください。

@Test(expected=IncorrectArgumentForSetter.class)
public void testSetterForeignWord("") throws Exception {
  card.setForeignWord("");
}

また、標準的なJavaの例外を使用することを支持すべきです。あなたの IncorrectArgumentForSetter は、おそらく IllegalArgumentException .