导述

类设计时,一般都是根据单元测试规范设计程序,尽量避免同一个类中的函数引用。但代码实际开发过程中,总有很多特殊情况。

小编今日写代码时,本身写了一个读取邮件的验证函数,在添加相关配置时,为了保证数据的准确性(公司测试部门,直接调用接口测试)又验证一次,这样就出现了同一个类之间的引用,在测试添加函数时就出现了麻烦事,该如何Mock 这个同一个类中的函数调用呢?

556e8f7c6ecf8e9b6be5985131496e17.png

解决方案

通过万能的谷歌,在stackoverflow找到了问题解决方案。话不多说,直接上代码

b7bf0b7799e477cb41a13e8f29279c02.png

类代码

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实现。

如有问题,可以留言吆。如有帮助可以赞赏吆。

10ded6ad13a0df62f662be763704671a.png
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐