导述
类设计时,一般都是根据单元测试规范设计程序,尽量避免同一个类中的函数引用。但代码实际开发过程中,总有很多特殊情况。
小编今日写代码时,本身写了一个读取邮件的验证函数,在添加相关配置时,为了保证数据的准确性(公司测试部门,直接调用接口测试)又验证一次,这样就出现了同一个类之间的引用,在测试添加函数时就出现了麻烦事,该如何Mock 这个同一个类中的函数调用呢?
解决方案
通过万能的谷歌,在stackoverflow找到了问题解决方案。话不多说,直接上代码
类代码
class Temp() {
public boolean methodA(String param) {
try {
if(methodB(param))
return true;
return false;
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试代码片段
@Test
public void testMethodA() {
Temp temp = new Temp();
Temp spyTemp = Mockito.spy(temp);
Mockito.doReturn(true).when(spyTemp).methodB(Mockito.any());
boolean status = spyTemp.methodA("XYZ");
Assert.assertEquals(true, status);
}
Spring Boot 中代码
@InjectMocks
private EmailServiceImpl emailService;
@Test
public void addEmailConfig1() {
EmailService spyTemp = Mockito.spy(emailService);
Mockito.doReturn(true).when(spyTemp).validateEmail(Mockito.any());
EmailConfigDto dataRequestEntity = EmailConfigDto.builder().emailHost("422").protocol("imap")
.userName("ant@test.com").build();
EmailConfigDto emailConfigDto = spyTemp.addEmailConfig("tt", dataRequestEntity);
assert !StringUtils.isEmpty(emailConfigDto.getId());
}
总结
通过代码可以看出,Mock同类的函数可以通过Mockito.spy实现。
如有问题,可以留言吆。如有帮助可以赞赏吆。