@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 {
}
....
}
有很多像这样的集成测试实现:
// 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 {
}
....
}