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