Wie zum Hohn JPA-repository speichern-Methode im unit-tests

Beispielsweise, ich habe diese Methode in UserService:

  @Override
  @Transactional
  public UserDto create(UserDto userDto) {

    User dbUser = userRepository.findOne(userDto.getId());

    if (dbUser != null) {
      throw new AuthException(AuthException.ErrorCode.DUPLICATE_USER_EXCEPTION);
    }

    User oneByLogin = userRepository.findOneByLogin(userDto.getLogin());
    if (oneByLogin != null) {
      throw new AuthExceptionAuthException.ErrorCode.DUPLICATE_LOGIN_EXCEPTION);
    }

    User newUser = new User();
    newUser.setGuid(UUID.randomUUID().toString());
    newUser.setInsertDate(new Date());
    newUser.setFirstName(userDto.getFirstName());
    newUser.setLastName(userDto.getLastName());
    newUser.setLogin(userDto.getLogin());
    newUser.setPassword(userDto.getPassword());
    newUser.setAuthToken(TokenGenerator.nextToken());
    newUser.setAuthTokenCreatedDate(new Date());

    User savedUser = userRepository.save(newUser);

    userDto.setAuthToken(savedUser.getAuthToken());
    log.info("User {0} created", savedUser.getLogin());
    return userDto;
  }

Wie kann ich das erstellen von unit-Tests für diese Methode? Ich versuchte weiter:

  @Test
  public void createUser() {

    UserDto userDtoRequest = new UserDto();
    userDtoRequest.setLogin("Alex");
    userDtoRequest.setPassword("123");

    UserDto found = userService.create(userDtoRequest);
    assertThat(found.getAuthToken()).isNotEmpty();
}

Ich habe neben logic:

  1. Test starten
  2. User dbUser = userRepository.findOne(userDto.getId()); dbUser = NULL
  3. if (dbUser != null) und if (oneByLogin != null) überspringen
  4. neuen Benutzer erstellen und festlegen von Daten
  5. User savedUser = userRepository.save(newUser); savedUser = NULL

Zu diesem Schritt, ich habe ein problem denn ich kann mich nicht verspotten userRepository.save(newUser).

newUser create inside the method. and test fail.

savedUser.getAuthToken() - savedUser == NULL

Kann ich umschreiben:

    userRepository.save(newUser);
    userDto.setAuthToken(newUser.getAuthToken());
    log.info("User {0} created", newUser.getLogin());
    return userDto;

aber was ist, wenn ich das zurückgegebene Objekt savedUser?

  • Sie testen Ihren service, so sollten Sie verspotten seine Abhängigkeiten wie das repository. Durch die Verspottung der Methode save können Sie das Objekt angeben, das es gibt.
  • grape_mao und wie mache ich es? wie rufe ich die Methode userRepository.save(newUser), wenn die newUser-Objekt erstellen im service-Methode und ich habe es nicht in meinem test. wenn(userService.speichern(???)).thenReturn(???);
  • Wenn Sie nicht schreiben können testen Sie Ihre Methode, es ist ein Zeichen, dass Sie brauchen, um zu teilen Sie in mehrere Teile, und versuche Sie separat.
  • Sie haben zwei Optionen. 1. Sie ignorieren das argument, übergeben, zurückgeben User mit einem token. 2. verwenden Sie so etwas wie doAnswer zu verspotten, die Methode, so dass Sie fangen kann, das argument.
  • Möglich, Duplikat der Nicht in der Lage zu verspotten, Spring-Data-JPA-repositories mit Mockito
InformationsquelleAutor ip696 | 2018-07-09
Schreibe einen Kommentar