Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Excluding classes from test context

How to exclude some beans from loading with component-scan, in an context that <import>'s from another xml that does need to scan all packages. This works nicly if I put it to main context:

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

But I need controllers in live environment.

I'd like to exclude controller class loading from my integration test context. How would it be possible to achieve this?

like image 372
Mihkel L. Avatar asked Dec 20 '16 15:12

Mihkel L.


1 Answers

You could use spring profiles for that( reference How to set a Spring profile to a package? ), by using

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

and annotating your test with the specific @ActiveProfile("test")

EDIT:

If your xml does not define a <component:scan> tag, the you can control package scanning from your unit test by using java configuration. The controllers can then be excluded with the @ComponentScan excludeFilter as follows:

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


    }
like image 159
Alex Ciocan Avatar answered Nov 15 '22 08:11

Alex Ciocan