@DataJpaTest не загружает необходимые классы - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь настроить некоторые тесты Spring Boot JPA, используя:

package biz.ianw.coindatabase.test;

@RunWith(SpringRunner.class)
@DataJpaTest     
public class DbTests {
  @Test
  public void test1() { ... }
}

У меня есть класс обслуживания:

package biz.ianw.coindatabase.database;

//@Service
@Repository
@Transactional(readOnly=false)
public class CoinDbService { ... }

и заявка:

package biz.ianw.coindatabase;

@SpringBootApplication
@Slf4j
@Configuration
@EnableEncryptableProperties
public class Main {
  @Autowired
  CoinDbService dbService;
... }

Запуск теста выдает ошибку:

Для поля dbService в biz.ianw.coindatabase.Main требуется компонент типа 'biz.ianw.coindatabase.database.CoinDbService', который не может быть найден.

Это, как я предполагал, связано с типом bean-компонентов @DataJpaTest, загружаемых при запуске:

@ DataJpaTest можно использовать, если вы хотите протестировать JPA-приложения. От по умолчанию он настроит встроенную базу данных в памяти, сканирование для Классы @Entity и настройка репозиториев Spring Data JPA. регулярное Бины @Component не будут загружены в ApplicationContext.

Я не совсем уверен, почему классы @Service следует рассматривать как необязательные для тестирования JPA, но я попытался форсировать этот вопрос, аннотируя его как @Repository, но безрезультатно.

Я могу вручную загрузить класс с помощью @Import (...), но это выглядит немного странно. Есть ли лучший способ сообщить DataJpaTest, что мне нужно для тестирования?

1 Ответ

0 голосов
/ 02 мая 2018

Я цитирую из DataJpaTest документацию , где вы можете найти ответ на свой вопрос.

Аннотация, которую можно использовать в сочетании с @RunWith (SpringRunner.class) для типичного теста JPA. Может использоваться, когда тест фокусируется только на компонентах JPA.

Использование этой аннотации отключит полную автоконфигурацию и вместо этого применять только конфигурацию, относящуюся к тестам JPA.

По умолчанию в тестах, помеченных @DataJpaTest, будет использоваться встроенный база данных в памяти (замена любой явной или обычно автоматически настраиваемой Источник данных). Аннотацию @AutoConfigureTestDatabase можно использовать для переопределить эти настройки.

Если вы хотите загрузить полную конфигурацию приложения, но использовать встроенную базу данных, вы должны рассматривать @SpringBootTest в сочетании с @AutoConfigureTestDatabase, а не с этой аннотацией.

...