簡體   English   中英

存儲庫模擬不起作用。 返回錯誤的 Http 狀態

[英]Repository mocking doesn`t work. Return wrong Http status

我的UsserServiceImpl.javacreateUser()方法

public ResponseEntity<UserDto> createUser(UserDto userDto) {
        User user = new User(userDto.getName(), userDto.getProducts(), getCurrentDate(), null);
        user = repository.save(user);
        return user != null ? new ResponseEntity<>(convertToDto(user), HttpStatus.OK) : new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}

我有這個方法的單元測試

@Mock
private UserRepository userRepository;

private UserService userService;

@BeforeEach
void init() {
    userService = new UserServiceImpl(userRepository);
}

@Test
void createUser() {
    Set<Product> productSet = createProducts();
    LocalDate date = getCurrentDate();
    User user = new User("Max", productSet, date, null);

    when(userRepository.save(user)).thenReturn(new User(UUID.fromString("e7485042-b46b-11e9-986a-b74e614de0b0"), "Max", productSet, date, null));

    ResponseEntity<UserDto> userDto = userService.createUser(new UserDto("Max", productSet));

    assertEquals(HttpStatus.OK, userDto.getStatusCode());
    assertEquals(userDto.getBody(), new UserDto("Max", productSet));
}

當我執行測試時,我收到一個 `\\error:

org.opentest4j.AssertionFailedError:預期:200 OK 實際:400 BAD_REQUEST

據我了解,問題在於repository.save()方法返回 null。
我完全不明白為什么這個字符串

when(userRepository.save(user))
 .thenReturn(
   new User(UUID.fromString("e7485042-b46b-11e9-986a-b74e614de0b0"), 
   "Max", 
   productSet, 
   date, 
   null)
 );

不能正常工作,任何幫助表示贊賞!

這是因為在這個場景中涉及到 2 個User對象。 在運行時在createUser()內部,將創建一個新的User對象。 User對象不等於您在編寫 Mock 語句時創建的User對象。 因此,您可以在定義模擬語句時接受任意User對象。

Mockito.any(User.class)

如果您希望這兩個對象相等; User類應該提供適當的equals()實現。 它似乎沒有提供這樣的實現。 因此,您可以嘗試以下操作。

    when(userRepository.save(any(User.class)))
   .thenReturn(
      new User(UUID.fromString("e7485042-b46b-11e9-986a-b74e614de0b0"), 
              "Max", 
              productSet, 
              date, 
              null)
   );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM