Рубрики
Без рубрики

Не удалось найти @SpringBootConfiguration с помощью @DataJpaTest

Изучите две различные причины ошибки: “Не удалось найти конфигурацию @SpringBootConfiguration”.

Автор оригинала: Martin van Wingerden.

1. введение

В нашем уроке по тестированию в Spring Boot мы увидели , как мы можем использовать аннотацию @DataJpaTest .

В этом следующем уроке мы увидим как устранить ошибку “Не удалось найти @SpringBootConfiguration .

2. Причины

Аннотация @DataJpaTest помогает нам настроить тест JPA. Для этого он инициализирует приложение, игнорируя несущественные части. Например, он будет игнорировать контроллеры MVC.

Однако для инициализации приложения требуется настройка.

Для этого он выполняет поиск в текущем пакете и поднимается по иерархии пакетов до тех пор, пока не будет найдена конфигурация.

Например, давайте добавим @DataJpaTest в com.baeldung.data.jpa пакет . Затем он будет искать класс конфигурации в:

  • Например, давайте добавим
  • @DataJpaTest
  • в

Однако, если конфигурация не найдена, приложение сообщит об ошибке:

Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...)
  with your test java.lang.IllegalStateException

Это может, например, произойти из-за того, что класс конфигурации находится в более конкретном пакете, например com.baeldung.data.jpa.application .

Давайте переместим класс конфигурации в com.baeldung.data.jpa. В результате Весна теперь сможет его найти.

С другой стороны, у нас может быть модуль, у которого нет @SpringBootConfiguration . В следующем разделе мы рассмотрим этот сценарий.

3. Отсутствует @SpringBootConfiguration

Что делать, если наш модуль не содержит никакой @SpringBootConfiguration? Для этого может быть несколько причин. Давайте предположим, что для этого урока у нас есть модуль, содержащий только классы моделей.

Итак, решение простое. Давайте добавим @SpringBootApplication в наш тестовый код:

@SpringBootApplication
public class TestApplication {}

Теперь, когда у нас есть аннотированный класс, Spring может загружать наши тесты.

Чтобы проверить нашу настройку, давайте введем TestEntityManager и проверим, что он установлен:

@RunWith(SpringRunner.class)
@DataJpaTest
public class DataJpaUnitTest {

    @Autowired
    TestEntityManager entityManager;

    @Test
    public void givenACorrectSetup_thenAnEntityManagerWillBeAvailable() {
        assertNotNull(entityManager);
    }
}

Этот тест завершается успешно, когда Spring может найти @SpringBootConfiguration в своем собственном пакете или в одном из родительских пакетов .

4. Заключение

В этом коротком уроке мы рассмотрели две различные причины ошибки: “Не удалось найти @SpringBootConfiguration “.

Во-первых, мы рассмотрели случай, когда класс конфигурации не удалось найти. Это было из-за его расположения. Мы решили эту проблему, переместив класс конфигурации в другое место.

Во-вторых, мы рассмотрели сценарий, в котором класс конфигурации был недоступен. Мы решили эту проблему, добавив @SpringBootApplication в нашу тестовую кодовую базу.

Как всегда, полный исходный код статьи доступен на GitHub .