Spring Boot 2.1.1: java.lang.IllegalStateException: невозможно получить ошибку базовых пакетов @EnableAutoConfiguration при запуске модульного теста - PullRequest
0 голосов
/ 08 января 2019

Следующая ошибка будет выдана при выполнении моего модульного теста. Пожалуйста, посоветуйте, если я что-то упустил. Я использую Spring Boot 2.1.1.RELEASE. Спасибо!

java.lang.IllegalStateException: невозможно получить @EnableAutoConfiguration базовые пакеты


приложения test.yml

spring:
  profiles: test
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
    username : xxx
    password : xxx
  jpa:
    hibernate:
      ddl-auto: update
  cache:
    type: simple

AppRepository.java

@Repository
public interface AppRepository extends CrudRepository<App, Integer> {

    App findFirstByAppId(String appId);

}   

AppRepositoryTest.java

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {AppRepository.class})
@EnableConfigurationProperties
@DataJpaTest
@ActiveProfiles("test")
public class AppRepositoryTest {

    @Autowired
    AppRepository appRepository;

    @Before
    public void setUp() throws Exception {
        App app = new App();
        app.setAppId("testId");
        appRepository.save(app);
    }

    @Test
    public void testFindFirstByAppId() {
        assertNotNull(appRepository.findFirstByAppId("testId"));        
    }
}

Структура пакета

└───src
    ├───main
    │   ├───java
    │   │   └───com
    │   │       └───abc
    │   │           └───app
    │   │               ├───config
    │   │               ├───data
    │   │               │   ├───model
    │   │               │   └───repository
    │   │               ├───exception
    │   │               ├───service
    │   │               └───serviceImpl
    │   └───resources
    │       ├───META-INF
    │       └───static
    │           ├───css
    │           ├───images
    │           └───js
    └───test
        └───java
            └───com
                └───abc
                    └───app
                        ├───data
                        │   └───repository
                        ├───service
                        └───serviceImpl

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Мне удалось заставить его работать, когда я удалил «ActiveProfiles» и «EnableConfigurationProperties» и, наконец, указал класс Main в аннотации ContextConfiguration:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {AppMain.class})
@DataJpaTest
public class AppRepositoryTest {

    @Autowired
    AppRepository appRepository;

    @Before
    public void setUp() throws Exception {
        App app = new App();
        app.setAppId("testId");
        appRepository.save(app);
    }

    @Test
    public void testFindFirstByAppId() {
        assertNotNull(appRepository.findFirstByAppId("testId"));        
    }
}
0 голосов
/ 08 января 2019

Согласно 45.3. Тестирование приложений Spring Boot docs рекомендуемый способ включения функций Spring Boot (например, @EnableAutoConfiguration) - использовать @SpringBootTest вместо старого @ContextConfiguration:

Spring Boot предоставляет аннотацию @SpringBootTest, которую можно использовать в качестве альтернативы стандартной аннотации @ContextConfiguration для весеннего теста, когда вам нужны функции Spring Boot. Аннотация работает путем создания ApplicationContext, используемого в ваших тестах, через SpringApplication. В дополнение к @SpringBootTest также предоставлен ряд других аннотаций для тестирования более конкретных фрагментов приложения.

Вы можете попробовать написать тесты с помощью @ContextConfiguration, который является частичной настройкой Spring Boot, но у вас будут похожие проблемы. Spring Boot в значительной степени основан на соглашениях, например Сканирование компонента начинается с пакета, который содержит @SpringBootApplication аннотированный класс. Идти против этих соглашений не рекомендуется.

...