Вы пометили OP как H2, так что, я думаю, вы знаете о базах данных In-Memory.
Если вы используете аннотацию @SpringBootTest, вы пишете интеграционный тест, поэтому вы протестируете полное приложение как связано весной. Для эффективности вы можете использовать базу данных в памяти вместо полного SQL сервера.
Этого можно добиться, добавив базу данных H2 в качестве тестовой зависимости, которая будет выбрана Spring Boot для интеграции тестовых репозиториев. Затем вы можете ввести реальный репозиторий:
@Autowired
private LoginCredentialRepository loginCredentialRepository;
Дополнительно, вы можете сделать свой тест @Transactional. Затем каждый тестовый случай будет выполняться в отдельной транзакции, и транзакция будет откатываться после каждого теста, поэтому вам не нужно беспокоиться о перекрестном тестировании.
Если вы просто хотите выполнить модульное тестирование LoginCredentialService, вам нужно заглушить соответствующие методы в хранилище, например,
@MockBean
private LoginCredentialRepository loginCredentialRepository;
@Test
public void availableTest1() {
when(loginCredentialRepository.existByName(username)).thenReturn(true);
assertEquals(false, loginCredentialService.available(username));
}
@Test
public void availableTest2() {
when(loginCredentialRepository.existByName(username)).thenReturn(false);
assertEquals(true, loginCredentialService.available(username));
}
Вы также можете сделать это как чистый тест Mockito без @ SpringBootTest.