英文:
Strange Mockito verify fail
问题
我正在使用Mockito测试我的Java应用程序,一切都很好,直到出现这个奇怪的失败测试。
如你所见,这一行末尾有一个额外的空格。
这是我的createUser方法:
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
try {
User _user = userRepository.save(new User(user.getName()));
return new ResponseEntity<>(_user, HttpStatus.CREATED);
}
catch (Exception e) {
return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
还有我的UserRepository:
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findAll();
List<User> findByName(String name);
}
我尝试搜索相关内容,但没有找到任何相关的结果。如果有人能帮我找到相关的帖子,我将不胜感激。
英文:
I am testing my java app with Mockito, all good until this strange fail test.
As you can see there is an extra blank space at the end of the line.
This is my createUser method.
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
try {
User _user = userRepository.save(new User(user.getName()));
return new ResponseEntity<>(_user, HttpStatus.CREATED);
}
catch (Exception e) {
return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
And my UserRepository :
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findAll();
List<User> findByName(String name);
}
I tried to search for this but nothing related found, if someone can help me with a related post.
答案1
得分: 0
在这行代码中 User _user = userRepository.save(new User(user.getName()));
创建了一个新的 User 实例。
很可能在 User 类中没有自定义的 equals 实现,默认情况下,如果两个不同的实例包含相同的数据,equals 方法会返回 false。
解决方法有三种:
- 将 user 原样传递给 repository.save,不创建新的实例。
- 在 User 类中定义 equals 方法,使其基于 name 字段进行比较。
- 使用 ArgumentCaptor 更新断言,然后验证捕获的对象。
英文:
In line User _user = userRepository.save(new User(user.getName()));
new instance of User is created.
Mostly likely there is no custom equals implementation in User class - and as by default it would return false for 2 different instances, even if they contain same data.
3 ways to solve:
- pass user as-is into repository.save, without creating new instance
- define equals on User class to be equals on name field
- Update assertion to capture (using ArgumentCaptor) and then verify captured object
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论