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

发布于 2022-09-30 23:09:23 字数 901 浏览 46 评论 0

我有一个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即可。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

独夜无伴 2022-10-07 23:09:23
  • 那只能是在serviceA里写方法调用serviceB的方法,然后单元测试跑serviceA里调用了serviceB的方法。
  • 所谓单元测试,单元,指的就是一个一个方法,如果你serviceA里都没有调用serviceB,那也就无从谈及测试。
哽咽笑 2022-10-07 23:09:23
  1. 用构造方法/setter注入
  2. 不用spring的测试框架,直接Mockito mock serviceB 塞给 serviceA
  3. 测试
梦屿孤独相伴 2022-10-07 23:09:23

Mockito可以指定mock的方法。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文