1

私は、「Growing Object-Oriented Software Guided by Tests」という本に取り組んでいます。

しかし、私は Hamcrest と jMock の代わりに AssertJ と Mockito を使用しています。

の行 0 に関連付けられた 1 つ以上のテーブル イベントの発生を確認する必要がありましたJTable

    // verify that one or more events in row 0 happen
    verify(listener, atLeastOnce() ).tableChanged(refEq(new TableModelEvent(model, 0)));

(注:私は数日前refEqにムレイニクから親切に知らされました)。

ここで、タイプTableModelEventの行 0 で正確に 1 つが発生したことを確認する必要があります。TableModelEvent.UPDATEこの本には次のものがあります。

one( listener ).tableChanged( with( aChangeInRow( 0 )));

... aChangeInRowjMock から来ているようです。

NBTableModelEventには便利な方法があり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 );

しかし、これはコンパイルさえしません...私は何を書くべきでしたか?

より一般的には、パラメーターとして渡された値 (ここでは a TableModelEvent) を検証済みのメソッドに抽出して、必要なテストを行うための AssertJ/Mockito 手法はありますか?

4

2 に答える 2

0

If you don't want to use Hamcrest You will have to write your own matcher veryfing the result of a getType method.

ArgumentMatcher<RockData> checkTypeMatcher = new ArgumentMatcher<TableModelEvent>() {


public boolean matches(Object arg0) {   
    //put more logic here
    TableModelEvent event = (TableModelEvent) arg0; 
    return event.getType() == TableModelEvent.UPDATE;
}
};

verify( listener ).tableChanged(Mockito.argThat(checkTypeMatcher) );

UPDATE: Using ArgumentMatcher form Mockito.

ArgumentMatcher class comes from Mockito.

于 2016-10-15T17:56:40.800 に答える