Philipp Claßen Philipp Claßen - 5 months ago 42
Java Question

How to enable Spring's auto-configuration report in tests?

I just found out that Spring has a debug mode, which gives insights on the auto-configuration. For a server, it can be enabled by passing

--debug
as an application parameter.

Is there a way to enable the debug mode also for tests (executed with the
SpringJUnit4ClassRunner
)?





If the auto-configuration report is working, it should print some output like this:

=========================
AUTO-CONFIGURATION REPORT
=========================


Positive matches:
-----------------

ConfigServiceBootstrapConfiguration#configServicePropertySource matched
- matched (OnPropertyCondition)

ConfigurationPropertiesRebinderAutoConfiguration matched
- @ConditionalOnBean (types: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor; SearchStrategy: all) found the following [org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor] (OnBeanCondition)

ConfigurationPropertiesRebinderAutoConfiguration#configurationPropertiesBeans matched
- @ConditionalOnMissingBean (types: org.springframework.cloud.context.properties.ConfigurationPropertiesBeans; SearchStrategy: current) found no beans (OnBeanCondition)

ConfigurationPropertiesRebinderAutoConfiguration#configurationPropertiesRebinder matched
- @ConditionalOnMissingBean (types: org.springframework.cloud.context.properties.ConfigurationPropertiesRebinder; SearchStrategy: current) found no beans (OnBeanCondition)

EncryptionBootstrapConfiguration matched
- @ConditionalOnClass classes found: org.springframework.security.crypto.encrypt.TextEncryptor (OnClassCondition)

PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer matched
- @ConditionalOnMissingBean (types: org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy: current) found no beans (OnBeanCondition)


Negative matches:
-----------------

ConfigServiceBootstrapConfiguration.RetryConfiguration did not match
- required @ConditionalOnClass classes not found: org.springframework.retry.annotation.Retryable,org.aspectj.lang.annotation.Aspect (OnClassCondition)

DiscoveryClientConfigServiceBootstrapConfiguration did not match
- @ConditionalOnProperty missing required properties spring.cloud.config.discovery.enabled (OnPropertyCondition)

EncryptionBootstrapConfiguration.RsaEncryptionConfiguration did not match
- @ConditionalOnClass classes found: org.springframework.security.rsa.crypto.RsaSecretEncryptor (OnClassCondition)
- Keystore nor key found in Environment (EncryptionBootstrapConfiguration.KeyCondition)

EncryptionBootstrapConfiguration.VanillaEncryptionConfiguration did not match
- required @ConditionalOnMissing classes found: org.springframework.security.rsa.crypto.RsaSecretEncryptor (OnClassCondition)

EurekaDiscoveryClientConfigServiceBootstrapConfiguration did not match
- @ConditionalOnClass classes found: org.springframework.cloud.config.client.ConfigServicePropertySourceLocator (OnClassCondition)
- @ConditionalOnProperty missing required properties spring.cloud.config.discovery.enabled (OnPropertyCondition)


Exclusions:
-----------

None


Unconditional classes:
----------------------

None

Answer

--debug sets a debug property which then switches on the auto-configuration report. You can do the same in your test using, for example, @TestPropertySource on your test class:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
@TestPropertySource(properties = "debug=true")
public class YourTests {
    // …
}