Spring使用模拟自动填充列表

时间:2015-07-02 15:26:26

标签: spring unit-testing auto-populate

我想知道是否有人在构建的测试阶段成功@Autowired一个自动填充的列表对象,注入模拟?我希望能够做的是覆盖 Spring在测试时间内自动填充列表并在单元测试中填充模拟,而不是实现类。我通过在代码中指定@Resource而不是@Autowired成功完成了这个,但是当我部署Spring Web应用程序时,自动填充不会执行为我的列表指定的@Resource(它只是空的)。当我在列表中指定@Autowired时会发生相反的情况。应用程序运行时会自动填充该列表,但是当单元测试运行时,我无法使用模拟填充列表。它似乎是一个捕获22 ...

那么如何在List类型上使用@Resource并让Spring在运行时仍然执行自动填充?有没有人成功完成此操作 - 在运行时使用自动填充,但在测试阶段将mocks替换为列表?如果是这样,您是否可以发布测试@Configuration类的相关部分? (请注意Java注释,而不是XML)。感谢..

这适用于注入模拟,但是列表的自动填充不会在运行时启动:

@Resource(name = "myServices")
private List<MyService> myServices;

在我的测试配置中:

@Bean
@Qualifier("myServices")
public List<MyService> myServices() {
    List<MyService> myServices = new ArrayList<>();
    MyService mockService1 = Mockito.mock(MyService.class, Mockito.RETURNS_DEEP_STUBS);
    MyService mockService2 = Mockito.mock(MyService.class, Mockito.RETURNS_DEEP_STUBS);
    eventServices.add(mockService1);
    eventServices.add(mockService2);
    return myServices;
}

然后使用以下内容,自动填充一直处于活动状态(在运行时和测试阶段),但我无法在测试阶段使用@Autowired覆盖和注入模拟,因为它忽略了myServices @Bean测试配置中的定义:

@Autowired
@Qualifier("myServices")
private List<MyService> myServices;

提前感谢您对此有任何见解。

0 个答案:

没有答案