当前位置: 首页 > 知识库问答 >
问题:

@在Junit测试中,Mock MessageSource始终为getMessage返回null

松钟展
2023-03-14

我在测试类的顶部有以下内容:@Mock Private MessageSource MessageSource

通过调试,我可以确认messageSource属性正在被模拟,并且不为null。测试用例最终达到这一点:

messageSource.getMessage("DATA.IS.EMPTY", null, Locale.ENGLISH)

我确认我的消息属性文件中包含带有消息字符串的代码“DATA. IS. EMPTY”。我知道消息属性文件配置正确,因为我看到应用程序运行时消息出现在应用程序中。但是,在JUnit测试用例中,上面的getMessage返回为null。查看MessageSource的Spring留档,getMessage应该返回消息字符串或NoSuchMessageException,而不是null。是否由于MessageSource被模拟,预计在JUnit测试用例中getMessage会获得null?我没有正确地模拟MessageSource吗?我知道我可以模拟getMessage方法来返回消息字符串,但这对我来说似乎不对,因为我认为JUnit测试用例应该检查MessageSource是否可以在消息属性文件中找到代码。

共有2个答案

丁文轩
2023-03-14

由于它是一个mock,因此将返回null。

您必须显式配置该mock以在所述调用上返回某些内容,但在我看来,您希望使用实际实现,而不是mock。

冯鸿哲
2023-03-14

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

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

@Autowired
private MessageSource messageSource;

而不是

@Mock
private MessageSource messageSource;
 类似资料:
  • 问题内容: 我正在运行一个简单的JUnit测试,又是一个应用程序DAO。问题是我总是得到: JUnit测试是: 如你所见,我明确声明不回滚此方法。 Spring JUnit支持是否总是将rollback设置为true? 问题答案: 它应该可以正常工作,就像你期望的那样,但是可能是你在被测类中打开了另一个事务,或者某个地方有其他功能/或错误。 顺便说一句,这个注释应该是足够的:

  • 有一个@Value注释的常量,在运行测试时不会初始化,当构造函数中需要它时,它会抛出NullPointerException。 要测试的示例类: 示例测试类: 事情尝试了,但没有任何效果: 我已经创建了应用程序。具有所需值的属性文件 创建应用程序测试。属性,并添加了TestPropertySource(locations=“classpath:application test.properties

  • 我试着去模拟课堂,但我总是得到一个NPE。我见过当stubing方法时发布mockito-nullPointerException。在这篇文章中,他们这样解释: 我几乎可以肯定这也适用于我的问题。但我找不到解决办法。我已经试了10个小时了。 我还读了一些关于@autowired和@before的东西,显然@autowired是在@before之前创建的,这也可以解释我的NPE。 在@test vo

  • 我目前正在研究如何测试我的ElasticSearch类的覆盖率,它实现了ResHighLevel客户端。问题是它返回指向RestHighLevelClient.class.的空指针,我是ES的新手,我不知道我哪里出错了。 这是我的ElasticSearch类: 这是我的测试案例: 我的端口已在app.properties中设置为9200。 请在这方面给我一些帮助。我真的需要解决这个问题。任何帮助都

  • 我在应用程序中使用这些库: 执行官网。收拾一下。改装2:改装:2.4.0' 执行官网。收拾一下。改装2:变流器gson:2.3.0' 实现'com.squareup.okhttp3: okhttp: 3.10.0' 这是我的RetroFitClientInstance类实现: 直到今天早上它是没有问题,但从今天早上它是不工作和getMessage在onFailure返回null和t.toStrin

  • 问题内容: 我以前使用过媒体播放器,但从未遇到过此问题。每当我尝试使用MediaPlayer.create()时,该方法都会使我为null,并且无法播放声音。有什么我想念的吗? 我的sound.mp3在我的原始文件夹中,通过将声音拖到eclipse中的文件夹中,我将其放置在其中。请帮忙,因为我以前玩过声音,所以这真的困扰我:( 问题答案: 如果create() API由于某种原因失败,则返回nul