2016-09-23 18 views
1

在我的单元测试类,我有以下配置:如何防止基于SpringJUnit4ClassRunner加载所有@Configuration类

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

但加载WebAppConfigTest下课后,它装载有@Configuration,是我的WebAppConfig类把退出测试包(src/test/java)。

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

WebAppConfig类把

@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 { 

如何防止此类出来的测试包的加载?

+0

你可以发布你的WebAppConfigTest.class和WebAppConfig.class –

回答

0

Spring不会区分src/test/java或src/main/java中的软件包以进行组件扫描。

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

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

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