Main reason for @TestConfiguration is to allow having configuration without picking it up by auto scanning.
But my test with @SpringBootTest and without any @Import loads definitions from top-level class marked by @TestConfiguration.
| | +--- org.springframework.boot:spring-boot-starter-test: -> 1.5.3.RELEASE
| | | +--- org.springframework.boot:spring-boot-test:1.5.3.RELEASE
| | | \--- org.springframework:spring-test:4.3.8.RELEASE
@TestConfiguration is defined in Core module and @SpringBootTest class in module that uses Core test module via Gradle's testCompile project (...).
Documentation says:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-testing-spring-boot-applications-excluding-config
When placed on a top-level class, @TestConfiguration indicates that classes in src/test/java should not be picked up by scanning.
Is dependency for module via testCompile project a reason for a problem? How can I mark a class to be eligible for @Import without being auto-scanned?
Comment From: wilkinsona
I'm not sure that I've followed your description of how your code is arranged and the problem that you're seeing. Can you please provide a small sample that shows the code structure and the problem it causes?
Comment From: gavenkoa
I tried to make minimal example similar to prod sources and @TestConfiguration works fine there.
The class from one module under src/test/java:
@TestConfiguration
@ComponentScan(basePackageClasses = {InMemoryDbConfig.class})
@EntityScan(basePackageClasses = {InMemoryDbConfig.class})
@EnableJpaRepositories(basePackageClasses = {InMemoryDbConfig.class})
@ImportAutoConfiguration({HibernateJpaAutoConfiguration.class})
public class InMemoryDbConfig {
@Bean
public javax.sql.DataSource dataSource() {
return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.HSQL).setSeparator(";").build();
}
@Primary
@Bean
public JpaProperties getJpaProperties() {
JpaProperties jpaProperties = new JpaProperties();
jpaProperties.setProperties(ImmutableMap.<String, String>builder()
.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect")
// .put("hibernate.hbm2ddl.auto", "create")
//.put("hibernate.hbm2ddl.import_files_sql_extractor", "org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor")
//.put("hibernate.hbm2ddl.import_files", "/memdbtest/dashboard.sql")
//.put("hibernate.show_sql", "true")
.put("hibernate.format_sql", "true")
//.put("hibernate.use_sql_comments", "true")
//.put("hibernate.physical_naming_strategy", "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy")
//.put("hibernate.implicit_naming_strategy", "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy")
.build());
JpaProperties.Hibernate hibernate = new JpaProperties.Hibernate();
hibernate.setDdlAuto("create"); // see SchemaAutoTooling.CREATE, SchemaAutoTooling.CREATE_DROP.
jpaProperties.setHibernate(hibernate);
jpaProperties.setDatabase(Database.HSQL);
return jpaProperties;
}
}
is picked by test with:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {HxApplication.class, ServerProperties.class}, webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@ActiveProfiles("dev")
@Slf4j
public class HxConfigTest {
@Autowired
private HxConfiguration appConfig;
@Test
public void dump() {
...
}
}
Configuration class enhanced with JpaRepository during @PostConstruct. I collected relevant parts from TRACE log level:
15:40:44.461 [Test worker] TRACE org.springframework.context.annotation.ClassPathBeanDefinitionScanner
** Scanning URL [jar:file:/C:/home/devel/app/app-core/build/libs/app-core-1.7.1-SNAPSHOT-test.jar!/app/core/db/InMemoryDbConfig.class]
15:40:44.467 [Test worker] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner
** Identified candidate component class: URL [jar:file:/C:/home/devel/app/app-core/build/libs/app-core-1.7.1-SNAPSHOT-test.jar!/app/core/db/InMemoryDbConfig.class]
15:40:44.618 [Test worker] TRACE org.springframework.context.annotation.ClassPathBeanDefinitionScanner
** Scanning URL [jar:file:/C:/home/devel/app/app-core/build/libs/app-core-1.7.1-SNAPSHOT-test.jar!/app/core/db/InMemoryDbConfig.class]
15:40:44.619 [Test worker] TRACE org.springframework.context.annotation.ClassPathBeanDefinitionScanner
** Ignored because not matching any filter: URL [jar:file:/C:/home/devel/app/app-core/build/libs/app-core-1.7.1-SNAPSHOT-test.jar!/app/core/db/InMemoryDbConfig.class]
15:40:45.323 [Test worker] DEBUG org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader
** Registering bean definition for @Bean method app.core.db.InMemoryDbConfig.dataSource()
15:40:45.324 [Test worker] DEBUG org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader
** Registering bean definition for @Bean method app.core.db.InMemoryDbConfig.getJpaProperties()
15:40:45.738 [Test worker] INFO org.springframework.beans.factory.support.DefaultListableBeanFactory
** Overriding bean definition for bean 'dataSource' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=inMemoryDbConfig; factoryMethodName=dataSource; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [app/core/db/InMemoryDbConfig.class]] with [Generic bean: class [org.apache.commons.dbcp.BasicDataSource]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in URL [jar:file:/C:/home/.gradle/caches/modules-2/files-2.1/org.springframework.batch/spring-batch-admin-manager/2.0.0.BUILD-SNAPSHOT/82b20b57e2c2e2d910d7b2c37bf58c6976071f1/spring-batch-admin-manager-2.0.0.BUILD-SNAPSHOT.jar!/META-INF/spring/batch/bootstrap/manager/data-source-context.xml]]
15:40:46.443 [Test worker] DEBUG org.springframework.context.annotation.ConfigurationClassEnhancer
** Successfully enhanced app.core.db.InMemoryDbConfig; enhanced class name is: app.core.db.InMemoryDbConfig$$EnhancerBySpringCGLIB$$738dc9b0
15:40:46.443 [Test worker] DEBUG org.springframework.context.annotation.ConfigurationClassPostProcessor
** Replacing bean definition 'inMemoryDbConfig' existing class 'app.core.db.InMemoryDbConfig' with enhanced class 'app.core.db.InMemoryDbConfig$$EnhancerBySpringCGLIB$$738dc9b0'
15:40:47.389 [Test worker] WARN org.springframework.web.context.support.GenericWebApplicationContext
** Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getJpaProperties': Could not bind properties to JpaProperties (prefix=spring.jpa, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); nested exception is java.lang.UnsupportedOperationException
15:40:47.392 [Test worker] WARN org.springframework.boot.SpringApplication
** Error handling failed (Error creating bean with name 'jobLoader' defined in URL [jar:file:/C:/home/.gradle/caches/modules-2/files-2.1/org.springframework.batch/spring-batch-admin-manager/2.0.0.BUILD-SNAPSHOT/82b20b57e2c2e2d910d7b2c37bf58c6976071f1/spring-batch-admin-manager-2.0.0.BUILD-SNAPSHOT.jar!/META-INF/spring/batch/bootstrap/manager/execution-context.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.config.internalTransactionAdvisor' defined in class path resource [org/springframework/transaction/annotation/ProxyTransactionManagementConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor]: Factory method 'transactionAdvisor' threw exception; nested exception is java.lang.NullPointerException)
15:40:47.398 [Test worker] ERROR org.springframework.boot.SpringApplication
** Application startup failedorg.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getJpaProperties': Could not bind properties to JpaProperties (prefix=spring.jpa, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); nested exception is java.lang.UnsupportedOperationException
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:189)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:372)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:856)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:120)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:189)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:131)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy1.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:108)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:146)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:128)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getJpaProperties': Could not bind properties to JpaProperties (prefix=spring.jpa, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); nested exception is java.lang.UnsupportedOperationException
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:334)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:291)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
... 75 common frames omitted
Caused by: java.lang.UnsupportedOperationException: null
at com.google.common.collect.ImmutableMap.put(ImmutableMap.java:326)
at org.springframework.beans.AbstractNestablePropertyAccessor.processKeyedProperty(AbstractNestablePropertyAccessor.java:382)
at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:289)
at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:280)
at org.springframework.boot.bind.RelaxedDataBinder$RelaxedBeanWrapper.setPropertyValue(RelaxedDataBinder.java:699)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:95)
at org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:859)
at org.springframework.validation.DataBinder.doBind(DataBinder.java:755)
at org.springframework.boot.bind.RelaxedDataBinder.doBind(RelaxedDataBinder.java:128)
at org.springframework.validation.DataBinder.bind(DataBinder.java:740)
at org.springframework.boot.bind.PropertiesConfigurationFactory.doBindPropertiesToTarget(PropertiesConfigurationFactory.java:272)
at org.springframework.boot.bind.PropertiesConfigurationFactory.bindPropertiesToTarget(PropertiesConfigurationFactory.java:240)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:329)
... 89 common frames omitted
Trace stop on attempt to add property to immutable Map from config file that shouldn't be loaded.
Comment From: wilkinsona
Thanks for trying. Unfortunately, if you can't reproduce the problem when you have the exact arrangement that's required to do so then it's going to be very difficult for us to figure out what's going on. That's even more the case here as I'm not confident that I understand the arrangement from your description.
Can you have another go at creating a reproducible example?
Comment From: gavenkoa
I think about putting breakpoint at event:
15:40:45.323 [Test worker] DEBUG org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader
** Registering bean definition for @Bean method app.core.db.InMemoryDbConfig.dataSource()
15:40:45.324 [Test worker] DEBUG org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader
** Registering bean definition for @Bean method app.core.db.InMemoryDbConfig.getJpaProperties()
Now I am exhausted to dig further.
Comment From: spring-projects-issues
If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.
Comment From: spring-projects-issues
Closing due to lack of requested feedback. If you would like us to look at this issue, please provide the requested information and we will re-open the issue.
Comment From: tkent
In case somebody happens across this issue, we ran into a similiar problem to the one described by @gavenkoa.
In our case, we found that someone had mistakenly included an unnecessary @ComponentScan annotation on one of the app configuration classes. Probably just a reflex from the pre @SpringBootApplication days.
Anyway, removing the unneeded @ComponentScan resolved the issue.
Comment From: mpscheidt
If test is configured with @SpringBootConfiguration plus @ComponentScan instead of @SpringBootApplication, then excludeFilters need to be added in order to avoid picking up @TestConfigurations without explicit @Import:
@SpringBootConfiguration
@ComponentScan(value = { "my.base.package" }, excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public class BootTestConfig { }
Comment From: mfromme
Hi,
picking up on this, can you elaborate how exactly these added excludeFilters works in the case of @TestConfiguration? Meaning, how does it affect exactly the scanning of @TestConfiguration, and how can I be sure it won't affect any other beans that I actually want in my context? Thanks!
Comment From: gavenkoa
@mfromme As I understand you can add @Filter(type = FilterType.ANNOTATION, classes = {TestConfiguration.class}).
I hate test slices when you exclude something. It is the price of "convention over configuration".
Today I would enable trace for everything to understand what magic is happening on Spring side. Then you will have enough info to set few breakpoints and step with debugger,..