Я борюсь с написанием интеграционных тестов, я хочу протестировать свой сервис, который взаимодействует с репозиторием JPA, и кажется, что я допустил ошибку, поскольку тест не запускается и выдает NPE на моем сервисе.
Мое приложение работает в конфигурации Springboot (ничего странного с странными зависимостями, я хотел сохранить как можно больше на складе, чтобы избежать побочных эффектов).
Мой сервис управляет пользователями и действительно прост:репозиторий - один метод, вызывающий репозиторий (я хотел сделать тестовый прогон до добавления логики управления)
@Service
public class ApplicationUserService{
@Autowired
private ApplicationUserRepository applicationUserRepository;
public ApplicationUser getUserByFirstname(String firstnameToLookFor){
return this.applicationUserRepository.findByFirstname (
firstnameToLookFor );
}
}
Репозиторий также прост:
public interface ApplicationUserRepository extends
JpaRepository<ApplicationUser, Integer> {
// ...
ApplicationUser findByFirstname(String firstname);
}
И, наконец, мой тесткоторый, как и два других элемента, действительно прост:
@RunWith (SpringRunner.class)
public class UserServiceIntegrationTest {
@TestConfiguration
static class UserServiceTestContextConfiguration {
@Bean
public ApplicationUserService applicationUserService(){
return new ApplicationUserService ();
}
}
@Autowired
private ApplicationUserService applicationUserService;
@MockBean
private ApplicationUserRepository applicationUserRepository;
@Before
public void setup(){
ApplicationUser user = new ApplicationUser ("darky", "bruce@wayne.com",
"iLoveSelin4", "Bruce", "WAYNE", "en");
Mockito.when (applicationUserRepository.findByFirstname (
user.getUsername () )).thenReturn ( user );
}
@Test
public void getUserByFirstName() {
String firstnameToLook = "Bruce";
ApplicationUser userFound = applicationUserService.getUserByFirstname (
firstnameToLook );
assertThat(userFound.getFirstname ()).isEqualTo ( firstnameToLook );
}
}
Предположительно, тест должен быть в порядке.Но, как уже говорилось, у меня есть NPE, брошенный в assert assertThat(userFound.getFirstname ()).isEqualTo ( firstnameToLook );
, и когда я отлаживаю строку прямо над assert, я вижу, что applicationUserService
равен нулю.
Что я делаю здесь неправильно?
Спасибо за помощь!