Тестовая настройка службы метания NPE - PullRequest
0 голосов
/ 03 февраля 2019

Я борюсь с написанием интеграционных тестов, я хочу протестировать свой сервис, который взаимодействует с репозиторием 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 равен нулю.

Что я делаю здесь неправильно?

Спасибо за помощь!

...