我正在尝试学习如何用java 8在 Spring 进行单元测试/ mockito测试,但遇到了一些问题。我正在尝试测试我的方法findUserById,但它一直运行false。可选类型问题是一个问题,但可能已经解决了这些问题。然而,它仍然运行false。我的其他测试工作,所以只有这一个测试是顽固的。我将感谢您的帮助。第一个
4ioopgfo1#
我相信在你的Controller.findUserById方法中你指的是ResponseEntity.of(...)而不是ResponseEntity.ok(...),因为UserService.findUserById返回Optional<User>。所以假设是这样的话,我可以在你的测试中看到至少两个(潜在的)问题:1.您正在Assert两个不同的类型。expectedUser的类型是User,而service.findUserById返回的实际用户是Optional<User>。即使Optional<User>的底层值与expectedUser相同,它们也永远不会相等。我认为,IDE应该突出显示它,除非禁用了某些检查。1.不确定是否正确定义了User.equals和User.hashCode。乍一看,即使您修复了第一个点,您的testUser和expectedUser也可能不相等,除非这些方法仅基于User.id,而忽略了其他字段,如email、password、name等。
Controller.findUserById
ResponseEntity.of(...)
ResponseEntity.ok(...)
UserService.findUserById
Optional<User>
expectedUser
User
service.findUserById
User.equals
User.hashCode
testUser
User.id
email
password
name
1条答案
按热度按时间4ioopgfo1#
我相信在你的
Controller.findUserById
方法中你指的是ResponseEntity.of(...)
而不是ResponseEntity.ok(...)
,因为UserService.findUserById
返回Optional<User>
。所以假设是这样的话,我可以在你的测试中看到至少两个(潜在的)问题:1.您正在Assert两个不同的类型。
expectedUser
的类型是User
,而service.findUserById
返回的实际用户是Optional<User>
。即使Optional<User>
的底层值与expectedUser
相同,它们也永远不会相等。我认为,IDE应该突出显示它,除非禁用了某些检查。1.不确定是否正确定义了
User.equals
和User.hashCode
。乍一看,即使您修复了第一个点,您的testUser
和expectedUser
也可能不相等,除非这些方法仅基于User.id
,而忽略了其他字段,如email
、password
、name
等。