@Mock MessageSource 在 Junit 测试中始终为 getMessage 返回 null
Posted
技术标签:
【中文标题】@Mock MessageSource 在 Junit 测试中始终为 getMessage 返回 null【英文标题】:@Mock MessageSource always returns null for getMessage in Junit test 【发布时间】:2020-05-12 21:12:28 【问题描述】:我的测试类顶部有以下内容:
@Mock
private MessageSource messageSource
通过调试,我可以确认 messageSource 属性被嘲笑并且不为空。 测试用例最终到达这一点:
messageSource.getMessage("DATA.IS.EMPTY", null, Locale.ENGLISH)
我确认我的消息属性文件中有代码“DATA.IS.EMPTY”和消息字符串。我知道消息属性文件配置正确,因为我看到消息在运行时出现在应用程序中。但是,在 Junit 测试用例中,上面的 getMessage 返回为 null。查看 MessageSource 的 spring 文档,getMessage 应该返回消息字符串或 NoSuchMessageException,从不为空。由于 MessageSource 正在被模拟,是否期望在 Junit 测试用例中为 getMessage 获得空值?我没有正确嘲笑 MessageSource 吗?我知道我可以模拟 getMessage 方法来返回消息字符串,但这对我来说似乎不正确,因为我认为 JUnit 测试用例应该检查 MessageSource 是否可以在消息属性文件中找到代码。
【问题讨论】:
MessageSource
是否被注入到另一个目标测试类中?
【参考方案1】:
但这对我来说似乎不对,因为我认为 JUnit 测试用例应该检查 MessageSource 是否可以在消息属性文件中找到代码。
看来你真正需要的是真正的注射,而不是模拟的注射
这个
@Autowired
private MessageSource messageSource;
代替
@Mock
private MessageSource messageSource;
【讨论】:
【参考方案2】:因为是mock,所以会返回null。
您必须显式配置该模拟以在提到的调用时返回某些内容,但在我看来,您想要使用实际实现,而不是模拟。
【讨论】:
以上是关于@Mock MessageSource 在 Junit 测试中始终为 getMessage 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
帮忙解决:Unable to locate MessageSource with name 'messageSource'
Thymeleaf + Spring (not Boot) - 如何显示来自 messageSource 的消息