springboot junit5 mock测试,怎么mock ServiceA中的ServiceB呢?

我有一个ServiceA

@Service
public class ServiceA {
    @Resource
    private ServiceB serviceB;

    public void helloWorld() {
        if ("Hello World".equals(serviceB.get())) {
            System.out.println("成功");
        }
    }
}

ServiceA里面注入了serviceB

@Service
public class ServiceB {
    public String get() {
        return "我需要被mock";
    }
}

这个时候,我如果写单元测试的话,我要怎么mock ServiceA中的serviceB对象呢?

注:代码都是页面上手敲的,没检查代码是否正确,主要是为了表达问题

ServiceA 中用到了ServiceB,关于mock的方案我这里找到了。https://segmentfault.com/a/11...
新增一个@InjectMocks注解即可。

但是,我又遇到了新的问题,我的ServiceB比较复杂,ServiceA用到了ServiceB很多的方法,但是我只是想改一个方法的返回值,有没有啥办法,能只mock ServiceB中的某一个方法呢?其他的就保持Spring注入的bean即可。

阅读 3.8k
3 个回答
  • 那只能是在serviceA里写方法调用serviceB的方法,然后单元测试跑serviceA里调用了serviceB的方法。
  • 所谓单元测试,单元,指的就是一个一个方法,如果你serviceA里都没有调用serviceB,那也就无从谈及测试。
  1. 用构造方法/setter注入
  2. 不用spring的测试框架,直接Mockito mock serviceB 塞给 serviceA
  3. 测试

Mockito可以指定mock的方法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏