1. @Mock与@InjectMocks的作用

@Mock:创建一个Mock

@InjectMocks:创建一个实例(被测试类的实例,一般只用一次该注解)

在单元测试某个类的时候,需要标注@InjectMocks,该类的变量需要添加注解@Mock,当需要用到被测试类中变量下的变量时,需要通过Mockito.when(method).thenReturn()进行初始化

ps:必须使用@RunWith(MockitoJUnitRunner.class)或MockitoAnnotations.initMocks(this)进行mocks的初始化

2. 三种方式用于Mockito的单元测试

2.1 设置方法预期返回

Mockito.when(list.get(0)).thenReturn(“111”)

2.2 验证方法调用(不会用- -)

Mockito.verify(list, times(2)).get(0)

2.3 验证返回值

Assert.assertNotNull(task)

 

ps:当需模拟多个if-else情况时,只需在测试方法中多次调用目标方法即可,如果想为了清晰也能对同一个方法进行多个测试方法。

 

! ! ! 当使用Mockito匹配可变参数时,多传一次同类型的即可

! ! ! 当模拟静态方法或者工厂方法时,使用PowerMock,

在类上加如下注解:

@RunWith(PowerMockRunner.class)

@PrepareForTest(value = {UyunServiceHolder.class})

代码如下:

UyunServiceHolder uyunServiceHolder = PowerMockito.mock(UyunServiceHolder.class);

PowerMockito.mockStatic(UyunServiceHolder.class);

PowerMockito.when(UyunServiceHolder.getInstance()).thenReturn(uyunServiceHolder);

! ! ! dao层的方法不需要mock

 

更多推荐