@EnableAutoConfiguration on AbstractIntegrationTest 可能吗?

@EnableAutoConfiguration on AbstractIntegrationTest possible?

有很多像这样的集成测试实现:

// no @Annotations at all
class SomeIntegrationTest extends AbstractIntegrationTest {
  ...
}

使用(Spring Boot 1.5,JUnit 5)

@SpringBootTest(classes = {CoreConfiguration.class, RestTemplateAutoConfiguration.class, JacksonAutoConfiguration.class})
@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
@Transactional
public abstract class AbstractIntegrationTest {
  ...
}

这总是失败

org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type 'javax.persistence.EntityManagerFactory' available

除非我用

注释 每个 IntegrationTest-Implementation
@EnableAutoConfiguration    
class SomeIntegrationTest extends AbstractIntegrationTest {
 ...
}

我想知道为什么我不能 @EnableAutoConfiguration AbstractIntegrationTest 并完成它。 (这样做时,失败并显示 IllegalArgumentException: No auto-configuration attributes found. Is package.SomeIntegrationTest annotated with EnableAutoConfiguration?

我们的普通应用程序是这样的:

@SpringBootApplication
@Import({CoreConfiguration.class, OtherConfiguration.class})
public class WebApp {

这里的 @SpringBootApplication 显然意味着 @EnableAutoConfiguration 但我想避免用这个注释每个 *IntegrationTest 而是在 AbstractIntegrationTest 上配置一次。

这是在以任何方式对抗 spring-boot 还是有什么方法可以达到这个目的?谢谢。

您可以创建更新您的 AbstractIntegrationTest 摘要 class 以获得一个小的内部配置 class 例如TestConfiguration 使用 @Import(TestConfiguration.class) 注释加载。

@SpringBootTest(classes = {CoreConfiguration.class, RestTemplateAutoConfiguration.class, JacksonAutoConfiguration.class})
@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
@Transactional
@Import(AbstractIntegrationTest.TestConfiguration.class)   // <---- import the configuration
public abstract class AbstractIntegrationTest {

    @EnableAutoConfiguration
    // Any other applicable annotations e.g. @EntityScan
    static class TestConfiguration {

    }

    ....

}