![](/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.