导述
类设计时,一般都是根据单元测试规范设计程序,尽量避免同一个类中的函数引用。但代码实际开发过程中,总有很多特殊情况。
小编今日写代码时,本身写了一个读取邮件的验证函数,在添加相关配置时,为了保证数据的准确性(公司测试部门,直接调用接口测试)又验证一次,这样就出现了同一个类之间的引用,在测试添加函数时就出现了麻烦事,该如何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实现。
如有问题,可以留言吆。如有帮助可以赞赏吆。