@EnableAutoConfiguration на AbstractIntegrationTest возможно?
Имея множество реализаций интеграционных тестов, подобных этому:
// 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 с помощью
@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
,
Это как-то борется с пружинными сапогами или есть какой-то способ добиться этого? Благодарю.
0 ответов
Вы можете создать обновление своего AbstractIntegrationTest
абстрактный класс, чтобы иметь небольшой внутренний класс конфигурации, например 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 {
}
....
}