2017-03-09 1 views
1

を確認した後、流暢なアサーションを続けるには、私がMap<String, Action>持って言うと、私はこのように行く:AssertJ - クラス

assertThat(spyActionMap.get("a")).isInstanceOf(Action.class); 

...渡します。今私は得Actionが正しいものであることを確認したい:

assertThat(spyActionMap.get("a")).isInstanceOf(Action.class).getValue(Action.NAME).isEqualTo("Go crazy"); 

...は驚くことではないが、コンパイルされません。このようなことをする方法はありますか?

+0

'Action'クラスまたはそれの少なくとも関連部分のようないくつかのより多くのコンテキストを提供してください。それは 'getValue'メソッドを持っていますか? 'Action.NAME'とは何ですか? あなたは具体的に何を試そうとしていますか? – Riggs

+0

最初と2番目の質問に答えるためにJavadocを検索するだけで済みます。あなたの3番目の質問に対する答えは、私は恐れています:もしあなたが尋ねる必要があれば... –

+0

Javadocを調べるように言って、インタフェースjavax.swing.Action'を意味するかもしれないと私に暗示しています。私は静的フィールド 'NAME'とメソッド' getValue'を持っていることがわかります。あなたの質問に(少なくともタグを付けて)その情報を最初に提供すると役に立ちます。 – Riggs

答えて

1

あなたはisInstanceOfSatisfyingを試してみて、Consumerであなたのアサーションを指定することができます。

Object yoda = new Jedi("Yoda", "Green"); 
Object luke = new Jedi("Luke Skywalker", "Green"); 

Consumer<Jedi> jediRequirements = jedi -> { 
    assertThat(jedi.getLightSaberColor()).isEqualTo("Green"); 
    assertThat(jedi.getName()).doesNotContain("Dark"); 
}; 

assertThat(yoda).isInstanceOfSatisfying(Jedi.class, jediRequirements); 
assertThat(luke).isInstanceOfSatisfying(Jedi.class, jediRequirements); 
+0

ありがとうございます... AssertJの背後にある主要な人の一人として、 'isInstanceOf'(と同様のメソッド)によって返された' Assert'インターフェイスが、何らかの理由でそれによってチェックされたインスタンスと "スワップ"できなかった場合、それは問題のクラスに投げかけたのですか?あなたが提供する解決策は、AssertJツールボックスでもっと便利なツールを1つ使用することを示しています...しかし、おそらく理想的には「流暢」ではありません(明らかに私の考えを工夫することがどれほど難しいかはわかりません...) –

+0

残念ながらこれは可能ではありませんが、これはhttps://github.com/joel-costigliola/assertj-core/issues/683で議論されており、これは「isInstanceOfSatisfying」ソリューションにつながりました。 –

関連する問題