Проблема Junit Integration Test для тестирования функциональности создания и исключения - PullRequest
0 голосов
/ 01 мая 2020

Я просматривал множество статей по интеграционному тестированию. Насколько я понимаю, мы должны проводить тестирование без использования имитаций. Мне нужно проверить, что если лобби уже присутствует, оно должно выдать исключение. Я создаю лобби, которое, в свою очередь, взаимодействует с уровнем обслуживания пользователей. Ниже приведен сбой теста интеграции с исключением Null Pointer в userService.createUser (testUser) в методе setupLobby.

Что я делаю не так в этом тесте интеграции?

Код проверки интеграции -

public class LobbyServiceIntegrationTest {

LobbyService lobbyService;
UserService userService;

private User testUser;
private Lobby lobbyTest;
private Long lobbyId;
private List<User> userList = new ArrayList<>();

@BeforeEach
public void setupLobby(){

    testUser = new User();
    testUser.setName("testName");
    testUser.setUsername("testUsername");

    testUser = userService.createUser(testUser);

    lobbyTest = new Lobby();
    lobbyTest.setName("testLobby");
    lobbyTest.setHostPlayerId(testUser.getId());

    lobbyId = lobbyService.createLobby(lobbyTest);


}

@Test
public void createdLobbyExist_Exception(){

    Lobby newLobby = new Lobby();
    newLobby.setName("testLobby");
    newLobby.setHostPlayerId(1L);

    assertThrows(LobbyException.class, ()->lobbyService.createLobby(newLobby));
}

}

Функциональность, которую я хочу проверить

    public Long createLobby(Lobby newLobby){

    checkIfLobbyExist(newLobby);
    newLobby.getPlayerIds().add(newLobby.getHostPlayerId());

    newLobby = lobbyRepository.save(newLobby);

    User user = userRepository.getOne(newLobby.getHostPlayerId());
    user.setLobbyId(newLobby.getId());
    userRepository.save(user);

    return newLobby.getId();

}

И создание пользователя

    public User createUser(User newUser) {

    checkIfUserExists(newUser);

    newUser.setToken(UUID.randomUUID().toString());
    newUser.setStatus(UserStatus.OFFLINE);
    newUser.setCreationDate(new java.sql.Date(Calendar.getInstance().getTimeInMillis()));


    // saves the given entity but data is only persisted in the database once flush() is called
    newUser = userRepository.save(newUser);
    userRepository.flush();

    log.debug("Created Information for User: {}", newUser);
    return newUser;
}

1 Ответ

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

Ваш объект userService, а такжеobbyService вообще не инициализируется, поэтому вы ловите исключение нулевого указателя.

Если вы используете Spring Framework, добавьте в начало класса @SpringBootTest annotation + @Autowired for userService и лоббиСервис.

...