【发布时间】:2015-12-02 07:46:15
【问题描述】:
我有这个简单的测试,它甚至不是一个测试,因为我只是想模拟消息源。
我收到此错误:
org.springframework.context.NoSuchMessageException: No message
found under code '' for locale 'null'.
其他人可以验证此行为吗?
这是我设置的最小 Spring Boot 骨架测试,因为 ReloadableResourceBundleMessageSource 在另一个项目中不起作用,所以我想我会尽可能以最小的单位尝试它。
@RunWith(MockitoJUnitRunner.class)
public class DemoApplicationTests {
@Test
public void contextLoads() {
ReloadableResourceBundleMessageSource messageSource =
mock(ReloadableResourceBundleMessageSource.class);
when(
messageSource.getMessage(
anyString(),
any(Object[].class),
any(Locale.class)
)
).thenReturn("returnValue");
System.out.println("test");
}
}
这是我得到的错误:
org.springframework.context.NoSuchMessageException: No message
found under code '' for locale 'null'.
at org.springframework.context.support.AbstractMessageSource.getMessage(
AbstractMessageSource.java:159)
at com.example.DemoApplicationTests.contextLoads(
DemoApplicationTests.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at ....
....
....
....
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(
JUnit4IdeaTestRunner.java:117)
at com.intellij.rt.execution.junit.JUnitStarter.
prepareStreamsAndStart(
JUnitStarter.java:234)
at com.intellij.rt.execution.junit.JUnitStarter.main(
JUnitStarter.java:74)
在我看来,它无法正确模拟它。我也尝试过模拟MessageSource 接口,但无济于事。
【问题讨论】:
-
我不知道你的问题是什么,但是不能存根
getMessage的原因是因为它在AbstractMessageSource中声明了final,它是ReloadableResourceBundleMessageSource的超类. Mockito 不能存根 final 方法。 -
谢谢,这就解释了!
标签: java unit-testing junit mockito