Перейти к основному содержимому

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

· 2 мин. чтения

1. Введение

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

В следующем уроке мы увидим, как устранить ошибку «Невозможно найти @SpringBootConfiguration » .

2. Причины

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

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

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

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

  • com.foreach.data.jpa
  • com.foreach.data
  • и так далее

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

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

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

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

С другой стороны, у нас может быть модуль без @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 .