【问题标题】:@Mock MessageSource always returns null for getMessage in Junit test@Mock MessageSource 在 Junit 测试中始终为 getMessage 返回 null
【发布时间】: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 是否被注入到另一个目标测试类中?

标签: java unit-testing junit


【解决方案1】:

但这对我来说似乎不对,因为我认为 JUnit 测试用例应该检查 MessageSource 是否可以在消息属性文件中找到代码。

看来你真正需要的是真正的注射,而不是模拟的注射

这个

@Autowired
private MessageSource messageSource;

代替

@Mock
private MessageSource messageSource;

【讨论】:

    【解决方案2】:

    因为是mock,所以会返回null。

    您必须显式配置该模拟以在提到的调用时返回某些内容,但在我看来,您想要使用实际实现,而不是模拟。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      相关资源
      最近更新 更多