java 单元测试 Spring Boot 消息源

o4tp2gmn  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(132)

我正在使用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());
    }

}
bvuwiixz

bvuwiixz1#

将以下内容添加到测试类:

@ImportAutoConfiguration(MessageSourceAutoConfiguration.class)

相关问题