![](/img/trans.png)
[英]tagmanager.js on JSF 2.2 form doesn't work. What am I doing wrong?
[英]Repository mocking doesn`t work. Return wrong Http status
我的UsserServiceImpl.java
有createUser()
方法
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.