单元测试弹簧问题



我正在尝试学习如何使用java8在spring中进行单元测试/mokito测试,但遇到了一些问题。我正在尝试测试我的方法findUserById,但它一直运行为false。可选类型问题是一个问题,但可能已经解决了这些问题。然而,它仍然是假的。我的其他测试都有效,所以只有这一个测试很顽固。我将感谢你的帮助。

User Controller : 
@GetMapping("/{id}")
public ResponseEntity<User> findUserById(@PathVariable Integer id){
return ResponseEntity.ok(userServiceImp.findUserById(id));
}

UserApplictionTester : 

@Autowired
private Service service;
@MockBean
private Repository repo;
@Test
public void exampleTest() {
User expectedUser = new User(3, "example@gmail.com", "password1", "exampleName", "USER");
User testUser = new User();
testUser.setId(3);
when(repo.findById(any())).thenReturn(Optional.of(testUser));
assertEquals(expectedUser, service.findUserById(testUser.getId()));
}

我相信在您的Controller.findUserById方法中,您指的是ResponseEntity.of(...)而不是ResponseEntity.ok(...),因为UserService.findUserById返回Optional<User>。因此,假设是这种情况,我可以在您的测试中看到至少两个(潜在的(问题:

  1. 您正在断言两种不同的类型。expectedUser是类型User,而service.findUserById返回的实际用户是Optional<User>。即使Optional<User>的基本值与expectedUser相同,它们也永远不会相等。我认为,IDE应该突出显示它,除非某些检查被禁用
  2. 不确定User.equalsUser.hashCode的定义是否正确。乍一看,即使您固定了第一个点,您的testUserexpectedUser也可能不相等,除非这些方法仅基于User.id,忽略了其他字段,如emailpasswordname

最新更新