我正在使用MessageSource管理应用程序的错误消息。
我的错误消息位于src/main/resources/messages中的文件error_messages. properties中。
下面是我的MessageSource配置
@Configuration
@EntityScan("mypackage")
@EnableJpaRepositories("mypackage")
@ComponentScan(basePackages = {
"mypackage"})
public class DataConfig {
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages/error_messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
}
下面是我在加载和使用MessageSource时使用的组件(基于this)
@Component
public class ErrorMessages {
@Autowired
private MessageSource messageSource;
private MessageSourceAccessor accessor;
@PostConstruct
private void init() {
accessor = new MessageSourceAccessor(messageSource);
}
public String get(String code) {
return accessor.getMessage(code);
}
}
这是我的服务层。
@Service
public class MyServiceImpl implements MyService{
@Autowired
private ErrorMessages errorMessages;
@Override
public String getExampleMessage(){
return String.format(errorMessages.get("default.error"), "default");
}
}
我的属性文件
default.error=Default error with some default message %s.
当我运行应用程序的时候,这个方法很好用,现在我的问题是当我在单元测试中运行这个方法的时候,我希望它能从属性文件中获取错误消息,因为它是一个MockBean,我必须为它的返回值做存根,我不想这么做。
我该怎么做呢?
下面是我的测试。
@RunWith(SpringRunner.class)
public class MyServiceImplTest {
@TestConfiguration
static class MyServiceImplTestContextConfiguration {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
@Autowired
private MyService myService;
// I want to avoid mocking this.
@MockBean
private ErrorMessages errorMessages;
@Test
public void testGetExampleMessage() {
String expected = "Default error with some default message default.";
assertEquals(expected, myService.getExampleMessage());
}
}
1条答案
按热度按时间bvuwiixz1#
将以下内容添加到测试类: