大家好,我是神韵,是一个技术&生活博主。出文章目的主要是两个,一是好记忆不如烂笔头,记录总结中提高自己。二是希望我的文章可以帮到大家。欢迎来点赞打卡,你们的行动将是我无限的动力。
本篇主题是:Mock 和 MockBean – 有些bean不想Mock怎么办?

有些bean不想Mock,则必须要启动Spring容器,使用容器帮忙注入的Bean,需要进行Mock行为的类此时必须用MockBean注入。

在我写过的单元测试中,大多数都是用的Mock注入,因为Mock注入一般可以满足需求。但是一次测试中,应该属于集成测试,需要容器中相关的类,所以Mock注入不能满足要求,只能用MockBean注入

如果是简单的Mock,则配置非常简单,如下:
在这里插入图片描述
这里不需要借助任何容器。

对于MockBean,是需要启动容器,配置如下:
在这里插入图片描述
通过SpringRunner.class,和@SpringBootTest,配置运行环境为test启动Spring容器。通过@Autowired注入测试类UnitTestMockBean。
这里重点:
UnitTestMockBean是通过容器注入的,UnitTestRepository是通过MockBean注入的。

下面图片的UnitTestEntityCheckService这个类就是 本文主题,这个类不想Mock,这个类用的是容器的。
UnitTestMockBean是通过容器注入,同时也会注入UnitTestEntityCheckService,但是UnitTestRepository是通过MockBean注入的。
在这里插入图片描述
代码可以自己看 github地址:MockBean的使用

总结:
如果测试中不需要用到容器中的东西,即所有都可以Mock注入,那Mock够用了,大部分也够…
如果测试中需要用到一部分不想Mock的类,比如Mapper,公共判断等的这些类,则可以启动Spring容器,那些不想要Mock的直接不管,让容器注入,那些想Mock此时不能用注解@Mock,只能用@MockBean。
归纳差异:前者不需要容器,比较简单,后者需要启动容器。

很抱歉本文说的比较乱,因为最近工作比较忙,我也没啥时间总结。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐