@RunWith(MockitoJUnitRunner.class) // could be replace by MockitoAnnotations.initMocks(this)
public class FooTest {
final String finalField; // new object for every @Test method.
String ordinaryField; // new object for every @Test method.
static int staticField; // static and therefore perpetual.
@org.mockito.InjectedMock // annotated service would use other @Mock beans.
private ToTestService toTestService;
@org.mockito.Mock
private UsedInTestService usedInTestService;
@org.mockito.Mock
private UsedInTestService usedInTestServiceB;
private String expectedReturn1() {
// throws error if usedInTestServiceB is also 'initialized'
// when(usedInTestServiceB.boo()).thenReturn(expectedReturn2()); ERROR!
}
@Before
public void init() {
when(usedInTestService.foo(eq("A"), any(), anyString())).thenReturn(expectedReturn1());
// eq() and any() are matchers, either all params are matchers or all params are not, cannot mix.
}
@Test
public void testXX() {
toTestService.xx();
verify(toTestService).moo(eq("B"), any()); // all matchers or 0-macher cannot mix.
// verify is used to see if moo method with specified params are called.
// which is tantamount to:
// verify(toTestService, times(1)).moo(eq("B"), any());
}
}
今天试用了Mockito,很强大。经验见注释。