[解決済み] JUnit5 の assertAll と複数アサーションの比較
2023-05-21 07:10:28
疑問点
複数のアサーションをグループ化する理由はあるのでしょうか。
public void shouldTellIfPrime(){
Assertions.assertAll(
() -> assertTrue(isPrime(2)),
() -> assertFalse(isPrime(4))
);
}
とするのではなく、このように
public void shouldTellIfPrime(){
Assertions.assertTrue(isPrime(2));
Assertions.assertFalse(isPrime(4));
}
どのように解決するのですか?
の面白いところは
assertAll
は、それが
は常に渡されたすべてのアサーションをチェックします。
に渡されたアサーションをすべてチェックし、いくつ失敗しても構わないということです。もしすべてがパスすれば、すべてがうまくいきます。もし少なくとも 1 つが失敗すれば、うまくいかなかったこと (そしてその点に関しては正しかったこと) についての詳細な結果が表示されます。
これは、概念的に一緒になっている一連のプロパティを表明するために最もよく使われます。最初の直感は、「私はこれを1つとして主張したい」です。
例
あなたの具体的な例は
assertAll
なぜなら
isPrime
を素数と非素数でチェックすることは互いに独立しているからです。そのため、そのためのテストメソッドを2つ書くことをお勧めします。
しかし、住所のような単純なクラスで、フィールド
city
,
street
,
number
であり、それらはあなたが期待するものであると断言したい。
Address address = unitUnderTest.methodUnderTest();
assertEquals("Redwood Shores", address.getCity());
assertEquals("Oracle Parkway", address.getStreet());
assertEquals("500", address.getNumber());
さて、最初のアサーションが失敗するとすぐに、2番目のアサーションの結果を見ることができなくなり、非常に困ることがあります。これを回避する方法はたくさんあり、JUnit Jupiterの
assertAll
はその一つです。
Address address = unitUnderTest.methodUnderTest();
assertAll("Should return address of Oracle's headquarter",
() -> assertEquals("Redwood Shores", address.getCity()),
() -> assertEquals("Oracle Parkway", address.getStreet()),
() -> assertEquals("500", address.getNumber())
);
テスト対象のメソッドが間違ったアドレスを返した場合、このようなエラーになります。
org.opentest4j.MultipleFailuresError:
Should return address of Oracle's headquarter (3 failures)
expected: <Redwood Shores> but was: <Walldorf>
expected: <Oracle Parkway> but was: <Dietmar-Hopp-Allee>
expected: <500> but was: <16>
関連
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] Javaで数値を小数点以下n桁に丸める方法
-
[解決済み] Mockitoでvoidメソッドをモックする方法
-
[解決済み] Javaで配列を集合に変換する方法
-
[解決済み] 複数のJava例外を同じcatch節でキャッチすることはできますか?
-
[解決済み] HibernateがMultipleBagFetchExceptionをスローする - 複数のバッグを同時にフェッチできない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
強制型変換について
-
無効なメソッド宣言
-
-bash: java: コマンドが見つからない 解決方法
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
JNIエンカウンターエラー:構造体またはユニオンではない何かでメンバー 'FindClass' のリクエスト
-
eclipse にリソースリーク:'in' が閉じない
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
Zipファイルの圧縮・解凍にantを使用する