@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 {

    }

    ....

}
Другие вопросы по тегам