2017-12-13 8 views
1

私のコードでは、2つのフィールドに対して1つの値をアサーションする必要があります。これは私がしなければならないことです:Javaアサーション:同じ値の2つのフィールドをアサートする方法

assertThat(request.get(0).name()).isEqualTo("ABC"); 
assertThat(request.get(0).name2()).isEqualTo("ABC"); 

私は上記の2行に1行のアサーションを使用できますか?私が必要とするより多くのものを説明するために、例えば

は、私が何かを達成することができる方法があります:

assertThat(request.get(0).name() && request.get(0).name2()).isEqualTo("ABC"); 
+0

私の質問は、リンクに頼まれているものとは異なります。 – worrynerd

答えて

0

少しも賢いかもしれないが、しかし、あなたはこの試みることができる:

assertTrue(Stream.of(request.get(0).name(), request.get(0).name2()) 
     .allMatch("ABC"::equals)); 

またはこれをスピンすることができます。

assertThat(Arrays.asList(request.get(0).name(), request.get(0).name2()), 
     Every.everyItem(IsEqual.equalTo("ABC"))); 
0

何かのように:

assertThat(request.get(0).name().equals(request.get(0).name2()) ? 
         request.get(0).name() : "false").isEqualTo("ABC"); 
2

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"]>

関連する問題