私は、「テストによって導かれるオブジェクト指向ソフトウェアの成長」という本を取り上げています。AssertJとMockito:やや複雑なJTableイベントをチェックしますか?
しかし私は、HamcrestとjMockの代わりにAssertJとMockitoを使用しています。
私はこれまで、JTable
の行0に関連付けられた1つ以上のテーブルイベントの発生をチェックする必要がありました。
// verify that one or more events in row 0 happen
verify(listener, atLeastOnce()).tableChanged(refEq(new TableModelEvent(model, 0)));
(NB私は親切に数日前Mureinik here約refEq
を知らされました)。
TableModelEvent.UPDATE
タイプの0行目に正確に1つのTableModelEvent
が存在することを確認する必要があります。本の内容は次のとおりです。
... aChangeInRow
はjMockから来ているようです。
NB TableModelEvent
は有用な方法getType()
を持っています。ここに私が書いてみたいことがあります:
// verify that precisely one ***change*** event happens in row 0
// *** CAVEAT: ERRONEOUS CODE ***
verify(listener).tableChanged(refEq(new TableModelEvent(model, 0))).getType().isEqualTo(TableModelEvent.UPDATE);
しかし、これはコンパイルされません...私は何を書かなければならないのですか?
もっと一般的には、検証されたメソッドにパラメータとして渡された値(ここではTableModelEvent
)を抽出して任意のテストに従わせるためのAssertJ/Mockitoテクニックがありますか?
ありがとう...(私が誤解していない限り)MatcherとBaseMatcherは実際にHamcrestクラスです。ハムクレストフリーのソリューションは存在しないかもしれません(私はこの時点ではテスト用のnewbが多すぎるので質問しています)。しかし、もしそうなら、私はかなり驚いています... –
しかし、あなたはArgumentMatcherクラスを使うことができますMockito。上記の私の更新を参照してください。 –
本当にありがとう...私には、AssertJの "流暢な"精神の中でより多くのAssertJ技法がないかもしれないかどうか疑問に思っていますか?私の考えでは(私が言うように、私はnewbです)、私の他の問題と結びつくことはありません。あなたの解決策では、このアップデートが発生した行番号もチェックしません。 2つのAssertJメソッドを一緒に「ストリング」することによって、おそらく両方を行うソリューションです。 –