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