从测试上下文中排除类

时间:2016-12-20 15:59:58

标签: spring spring-boot

如何在<import>来自另一个需要扫描所有包的xml的上下文中,使用component-scan排除某些bean。 如果我把它放在主要的上下文中,这很有效:

<context:component-scan base-package="com.main">
        <context:exclude-filter expression="com.main.*Controller" type="regex"/>
</context:component-scan>

但我需要在现场环境中使用控制器。

我想从集成测试上下文中排除控制器类加载。怎么可能实现这个目标?

1 个答案:

答案 0 :(得分:4)

您可以使用

使用弹簧配置文件(参考How to set a Spring profile to a package?
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
        <!-- define profile beans at the end of the configuration file -->
    <beans profile="test">
    <context:component-scan base-package="com.main">
            <context:exclude-filter expression="com.main.*Controller" type="regex"/>
    </context:component-scan>
    </beans>

    <beans profile="!test">
    <context:component-scan base-package="com.main"/>
    </beans>

并使用特定的@ActiveProfile("test")

注释您的测试

编辑:

如果您的xml没有定义<component:scan>标记,则可以使用java配置从单元测试中控制包扫描。 然后可以使用@ComponentScan excludeFilter排除控制器,如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
public class HelperTest {

    @Configuration
    @ComponentScan(basePackages = "yourPackage",
            excludeFilters = @ComponentScan.Filter(value = Controller.class, type = FilterType.ANNOTATION))
    @ImportResource(locations = "classpath:context.xml")
    static class TestConfiguration {


    }