Mockito 测试框架
Mockito
Mockito是mocking框架
1 2 3 4 5 6
| <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>1.9.5</version> <scope>test</scope> </dependency>
|
1 2 3 4 5 6
| <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
|
1 2 3 4 5 6 7 8 9 10 11
| @Test public void verify_behaviour{ List mock = mock; mock.add; mock.clear; verify.add; verify.clear; }
|
mock redis
1 2 3 4
| @Mock private RedisTemplate<String, String> stringRedisTemplate; @Mock private ValueOperations valueOperations;
|
1
| when(stringRedisTemplate.opsForValue()).thenReturn(valueOperations);
|
mock redisson lock
1 2 3 4
| @Mock private RedissonClient redissonClient; @Mock private RedissonLock redissonLock;
|
1
| when(mgkBaseService.getLock(any(),any())).thenReturn(redissonLock);
|
1
| when(redissonClient.getLock(any())).thenReturn(redissonLock);
|
Mock @Value
1 2 3 4 5 6 7 8 9 10
| @Test public void testGetWeChatSign() { when(stringRedisTemplate.opsForValue()).thenReturn(valueOperations); ReflectionTestUtils.setField(landingPageServiceDelegate, "appId", ""); ReflectionTestUtils.setField(landingPageServiceDelegate, "appSecret", ""); ReflectionTestUtils.setField(landingPageServiceDelegate, "accessTokenUrl", ""); ReflectionTestUtils.setField(landingPageServiceDelegate, "jsapiTicketUrl", ""); String weChatSign = landingPageServiceDelegate.getWeChatSign(); assertNotNull(weChatSign); }
|
实际项目开发中,我们经常会使用@Value注解从配置文件中注入属性值,写单侧时,在不启动容器的条件下,如何对这种属性进行mock呢?对这种情况,Spring提供了一个很好的工具类ReflectionTestUtils来实现。
注入属性:
1 2
| @Value("${prepaid.partner.id}") private String merchantPartnerId;
|
对这个属性,在单测中可以这样mock:
1
| ReflectionTestUtils.setField(targetObject, "merchantPartnerId", "123");
|
Mock Void
1
| doNothing().when(collageLogService).insertLog(any(NewCollageOperationLogDto.class));
|
Mock 属性赋值
比如数据库插入数据时,po带Id
1 2 3 4 5 6
| when(mgkCollageMediaDao.insertSelective(any())).thenAnswer(answer -> { MgkCollageMediaPo po = answer.getArgumentAt(0, MgkCollageMediaPo.class); po.setId(2); return 1; }); collageMediaServiceDelegate.insert(operator, collageMediaDto);
|
预期的异常
1
| @Test(expected = IllegalArgumentException.class)
|
初始化参数
1
| BeanTestUtils.initSimpleFields(QueryArchiveListDto.builder().build());
|