Mockito使用笔记

Mockito

Posted by WS on May 22, 2021

后端项目单测使用mockito, 记录一些常用注解和方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
*@RunWith注解就是制定运行载体, 这里使用mockito的runner
*/
@RunWith(MockitoJUnitRunner.class)
public class DemoRepositoryAdapterTest {

    private static List<String> url = Arrays.asList("xxxx", "xxxx");

    /**
    *@InjectMocks 创建一个实例DemoRepositoryAdapter, 自动会mock注入相关依赖, 并最大程度地减少重复的mock
    * 也就是说想mock一个比较复杂的方法使用@InjectMocks
    */
    @InjectMocks
    private DemoRepositoryAdapter adapter;

    /**
    *@Mock 用于模拟对象, 有助于最大程度地减少重复的模拟对象, 也就说mock单个对象用, 比如一个用户信息实例
    */
    @Mock
    private DemoRepository demoRepo;

    @Mock
    private ApplicationSettingService settingService;

    /**
    *@Test 无需多说, 运行测试方法 
    */
    @Test
    public void updateDemoUrl_Success() {
        DemoUrlRequest request = DemoUrlRequest.builder().url(url).build();
        UpdateDemoUrlCommand command = UpdateDemoUrlCommand.builder().url(request.getUrl()).build();

        /**
        *Mockito.doNothing() 用于让 demoRepo实例执行 deleteDemoUrl函数时什么都不做
        *也就别让这一步卡住程序运行就行
        *还有Mockito.doThrow()返回特定异常的方法
        */
        Mockito.doNothing().when(demoRepo).deleteDemoUrl(Constant.NAME);
      
        /**
        *when(xxx).thenReturn(XXX) 字面意思, 调用特定方法执行时返回特定的内容
        */
        when(demoRepo.saveDemoUrl(Constant.DOWNLOADURL)).thenReturn(1);

        adapter.updateDemoUrl(command);

        assertNotEquals(command, null);
    }
}

%