@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,很强大。经验见注释。

更多推荐