如何防止SpringJUnit4ClassRunner加载所有@Configuration类

时间:2016-09-23 14:56:38

标签: java spring junit

在我的单元测试类中,我有以下配置:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebAppConfigTest.class)
public class ExampleTest {

但是在加载WebAppConfigTest类之后,它正在加载我的WebAppConfig类,该类具有@Configuration并且不在测试包中(src / test / java)。

注意:类WebAppConfig未配置为加载到单元测试中,但仍在收费。

WebAppConfig Class

@EnableWebMvc
@ComponentScan(basePackages = {"br.com.example"})
@PropertySource(value="classpath:application.properties")
@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {

WebAppConfigTest类

@ComponentScan(basePackages = {"br.com.example"})
@Configuration
public class WebAppConfigTest {

如何防止这个类被加载到测试包中?

1 个答案:

答案 0 :(得分:2)

Spring不会将软件包与src / test / java或src / main / java区分开来进行组件扫描。

@ComponentScan(basePackages = {"br.com.example"})

本质上是扫描所有@Configuration,当前包和子包中从“br.com.example”开始的所有包。 这些是您可以选择的选项:

  1. 更改您的包结构,以提供更具体的包来扫描测试类。
  2. 您可以使用@ComponenScan中的过滤器来包含/排除特定的包/类。在以这种方式加载应用程序上下文时,您可以避免弹簧拾取不需要的类。
  3. 如果可以手动选择所需的配置来加载测试的上下文,您甚至可以完全删除@ComponentScan并在“classes”属性中指定所有配置类。
  4. 您可以在配置类中使用@Profile,在测试类中使用@ActiveProfiles来映射要在特定配置文件中加载的配置类。