将@configurationbean注入到spring引导单元测试中

yks3o0rb  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(161)

我有一个maven模块库,可以作为外部依赖项包含在任何spring引导应用程序中( @SpringBootApplication )版本2.3.0。这个库模块显然没有自己的 @SpringBootApplication 但是,它确实包含 @Configuration 从src/main/resources/lib.properties加载属性的。这就是 @Configuration 类定义为:

@Configuration
@PropertySource({"classpath:lib.properties"})
public class MyLibConfig {

  @Value("${my.property.name}")
  private String myPropertyVal;

  @Bean("myBean")
  public List<String> propertyVal() { /* create a bean */ }

}

现在,我用这个豆子( myBean )在另一个 @Component 班级 lib 模块,并希望对其进行单元测试 @Component . 问题是,既然我没有 @SpringBootApplication 在这个 lib 我认为springboot测试应用程序上下文不知道如何从 @Configuration ,因此以下无法注入 myBean 进入 @Component 豆子:

@Component
public class MyComponent {

  @Autowired
  @Qualifier("MyBean")
  private List<String> myBean;

}

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MyComponent.class, MyLibConfig.class} )
// @TestPropertySource("classpath:lib-test.properties")
public class MyComponentTest {

  @Autowired
  private MyComponent myComponent;

}

我该如何处理这个问题?
更新-已解决
所以问题是 @Qualifier 价值观是错误的。一旦纠正了,我就 @TestPropertySource 不加注解,我可以
@Autowired myBean 并使用 lib-test.properties 在单元测试期间:

@Component
public class MyComponent {

  @Autowired
  @Qualifier("myBean") // This had been misspelled "MyBean"
  private List<String> myBean;

}

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MyComponent.class, MyLibConfig.class} )
@TestPropertySource("classpath:lib-test.properties") // Test context uses values from this properties file
public class MyComponentTest {

  @Autowired
  private MyComponent myComponent;

  @Autowired
  @Qualifier("myBean")
  private List<String> myBean;

}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题