How can I use one single line assertion for the above 2 lines?
は、なぜあなたはそのようなことをしたいですか?あなたが読み、維持するために、あなたのテストをより複雑になります
- :あまりにも巧妙な試みるしようとしていることで
は、次の2つの欠点を取得します。
- テストが
を失敗したとして、あなたは実際にあなたのテストは結構です、関連するフィードバック情報を失うことになります。
これらの2つの値のいずれかがアサーションを尊重しない場合は、問題を特定する正確な行があり、関連する情報メッセージもあります。私は同じ文で複数のアサーションを行うことが悪いとは言いたくない
final String expected = "ABC";
assertThat(request.get(0).name()).isEqualTo(expected);
assertThat(request.get(0).name2()).isEqualTo(expected);
:
はヒントとして、あなたは多分ちょうど重複を削除することもできます。
全くありません。
私はあなたが使用しているツールにあなたのアサート方法を適応させる必要があると言います。
これについては、マッチャーツールを指定しないでください。
マッチャツールがこの種のアサーションを行うためのサポートを提供する場合は、それを使用します。
それ以外の場合は、生のままでは作成しないでください。そうしないと、有用なエラーテストメッセージが得られるという利点が失われます。
以下は、この機能をそのまま使用するAssertJの例です。
@Test
void namesEquals() {
List<Request> requests = new ArrayList<>();
requests.add(new Request("ABC", "ABD"));
Assertions.assertThat(requests.get(0)).extracting(Request::name, Request::name2)
.containsExactly("ABC", "ABC");
}
そして、この失敗のテストで
は、あなたが有益な情報メッセージが表示されます:
java.lang.AssertionError:
Expecting:
<["ABC", "ABD"]>
to contain exactly (and in same order):
<["ABC", "ABC"]>
but some elements were not found:
<[]>
and others were not expected:
<["ABD"]>
私の質問は、リンクに頼まれているものとは異なります。 – worrynerd