Метод findByID JPA возвращает объект, отличный от того, который был определен в методе тестирования интеграции - PullRequest
0 голосов
/ 02 мая 2020

Я создал один объект testLobby класса Lobby в своем интеграционном тесте. При получении объекта в моем слое сервиса по идентификатору, я считаю, что он дает мне копию объекта testLobby, а не оригинал. И любые изменения объекта лоббирования в слое обслуживания не отражаются в объекте лоббирования, созданном в интеграционном тесте.

Мой тестовый класс с некоторым оператором печати

    @Test
public void addUserToLobby(){

    System.out.println("tostring->"+lobbyTest.toString());
    System.out.println("before ->"+lobbyTest.getPlayerIds().size());
    User newUser = new User();
    newUser.setUsername("user2");
    newUser.setPassword("password");

    newUser = userService.createUser(newUser);
    System.out.println("new user ->"+newUser.getId());

    lobbyService.addPlayerToLobby(lobbyTest.getId(),newUser.getId());
    System.out.println("after->"+lobbyTest.getPlayerIds().size());
    assertEquals(lobbyTest.getPlayerIds().size(),2);
}

Мой метод сервиса для тестирования

    public Lobby getLobby(Long id) {
    Optional<Lobby> optionalLobby = lobbyRepository.findById(id);
    if (!optionalLobby.isPresent()) {
        throw new LobbyException(String.format("Could not find lobby with id %d.", id));
    }
    return optionalLobby.get();
}



    public void addPlayerToLobby(long id, long userId){
    Lobby lobby = getLobby(id);

    System.out.println("to string service->"+lobby.toString());
    System.out.println("service ->"+lobby.getId()+" "+lobby.getPlayerIds().size());
    lobby.getPlayerIds().add(userId);
    saveOrUpdate(lobby);

    System.out.println("service3->"+lobby.getId()+" "+lobby.getPlayerIds().size());
}

    public void saveOrUpdate(Lobby updateLobby){
    lobbyRepository.save(updateLobby);
    lobbyRepository.flush();
    System.out.println("service method ->"+updateLobby.getId()+" "+updateLobby.getPlayerIds().size());
}

Вывод оператора print

tostring->entity.Lobby@2bf5b2d1 --> hex of object in test
before ->1
new user ->3
to string service->entity.Lobby@1d4bb56c --> hex of object in service layer
service ->2 1
service method ->2 2
service3->2 2
after->1

При печати шестнадцатеричного объекта в моем тестовом классе и классе обслуживания они различаются. И любая операция в объекте сервисного уровня не отражается в тестовом слое.

Как вернуть тот же объект, используя findById?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...