Hamcrest hasItem and Mockito verify inconsistency
我遇到了有关Hamcrest和Mockito的问题。
这是我正在尝试做的事情:
1 2 3 4 5 6 7 8 9 | public class A{ public void foo(List arg){ return; } } public BMatcher extends BaseMatcher{ //Some impl... } |
在测试中,我想做类似
的事情
1 2 3 | A a = mock(A.class); B expected = new B(); Mockito.verify(a).foo(argThat(JUnitMatchers.hasItem(new BMatcher(expected))); |
但是,
有什么好的方法可以验证方法是否正确调用?
您可以在Mockito Matchers类中使用'argThat'方法将hamcrest Matcher转换为模仿参数Matcher:
1 2 3 4 5 6 7 8 | import static org.mockito.Matchers.argThat; import org.hamcrest.Matchers; import org.hamcrest.Matcher; //.... public static < T > List< T > listWithItem(Matcher< T > m) { return (List< T >)argThat(Matchers.hasItem(m)); } |
您可以使用
1 2 3 4 5 6 7 8 9 | @Captor ArgumentCaptor<List> captor; // then in test ... verify(a).foo(captor.capture()); List values = captor.getValue(); assertThat(values, IsIterableContainingInOrder.containingInOrder(new BMatcher(expected)); ... |
我将