Я занимаюсь разработкой приложения, которое использует Spring Boot 2 и Spring Data JDB C. В конечном приложении будет использоваться MySQL.
. В настоящее время у меня есть уровень персистентности и уровень сервиса, а также несколько репозиториев, полученных из CrudRepository.
Для моих модульных тестов я действительно хочу сделать модульные тесты без какой-либо базы данных. Даже не H SQL. Я знаю, что здесь можно подписаться на несколько разных философий, но я хочу переключиться на чистые модульные тесты и посмотреть, как это закончится. Я буду использовать базу данных в интеграционных тестах.
У меня есть отдельная application.properties
в моей папке с тестами, где у меня есть отдельная конфигурация для моих тестов.
По умолчанию Spring Boot имеет значение H SQL если источник данных не определен в application.properties
. Но опять же, я хочу запустить свои тесты без какой-либо базы данных и только издеваться над моими реализациями CrudRepository. Я попытался отключить автоконфигурацию базы данных Spring Boot, используя различные варианты следующего в моем application.properties
:
spring.autoconfigure.exclude= \
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration
В своих тестах я пытался сделать что-то вроде этого:
@ExtendWith(SpringExtension.class)
@Transactional
@SpringBootTest
public class UserServiceTest {
private UserService userService;
@MockBean
private UserRepository userRepository;
@BeforeEach
void setUp() {
userService = new UserService(userRepository);
}
@Test
public void doSomeTest() {
// Test code goes here
}
}
Я использую инжекцию зависимости на основе конструктора в сервисах. Тем не менее, я получаю ошибки от Spring, такие как:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'package.userRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
Я хочу создать поддельный репозиторий, в котором я могу предварительно сконфигурировать поддельное хранилище для возврата фиктивных данных. Но похоже, что удаление конфигурации базы данных полностью удаляет CrudRepository, так что никакая часть приложения весенней загрузки не может запуститься. Или я что-то упускаю.
Я использую Eclipse, Maven, Mockito и JUnit5. Я должен отметить, что все работает, если я запускаю «модульные тесты» для тестовой базы данных mysql, поэтому я знаю, что нет ничего действительно плохого в коде, тестах или настройке в целом. Проблемы начинаются только тогда, когда я хочу избавиться от базы данных.
Я - младший Java разработчик, делающий это для развлечения, поэтому я могу упустить что-то очевидное. Поиск в Интернете данных Spring JDB C затруднен, поскольку я почти нахожу только решения, связанные с JPA.