单元测试时,引用了同类中的方法,如何mock?

导述

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

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

测试类,引用了同类中的方法,如何mock?

解决方案

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

测试类,引用了同类中的方法,如何mock?

类代码

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

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

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值