后端项目单测使用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);
}
}