如果类A中使用了B类,如:
类A如下
class A {
B b;
boolean test1(int x){};
void test2(){};
}
类B如下:
class B {
C c;
boolean testb(Object o){};
}
在写A的单测时需要mock 掉B类中所有的方法,并且需要mock掉A类自己的一下方法,则需要在单测中A类引用上加注解@Spy,因为要mock掉B的方法,所以A累上还需要加@InjectMocks,如下:
class test_A {
@Spy
@InjectMocks
A a;
@Mock
B b;
@Before
void init(){
MockitoAnnotations.initMocks(this);
}
@Test
void test_A(){
Mockito.when(B.testb(Mockito.any())).thenReturn(true);
doReturn(true).when(a).test1(Mockito.anyInt());//如果要mockA类中自己的方法,必须将返回值放在前面
}
}
对于Object类型参数使用Mockito.any()就行,对于String类型参数使用Mockito.anyString(),
对于int类型参数使用Mockito.anyInt(),
对于无返回值的使用Mockito.doNothing().when(类名,如A).方法名(Mockito.any());这种可以mock掉A类自己无返回值的方法。