java - 如何解决“论点不同!Junit 和 Mockito 中的通缉犯错误
问题描述
在执行涉及包含 verify.save() 方法的方法的JUnit测试用例时,我收到以下错误“参数不同!通缉'
@Test
public void checkCorrectAttemptTest() {
Multiplication multiplication = new Multiplication(50, 60);
User user = new User("abc");
MultiplicationResultAttempt attempt = new MultiplicationResultAttempt(user, multiplication, 3000, false);
MultiplicationResultAttempt verifiedAttempt = new MultiplicationResultAttempt(user, multiplication, 3000, true);
when(userRepository.findByAlias("abc")).thenReturn(Optional.empty());
boolean attemptResult = multiplicaitonServiceImpl.checkAttempt(attempt);
assertThat(attemptResult).isTrue();
verify(attemptRepository).save(verifiedAttempt);
}
我收到以下错误消息。
Argument(s) are different! Wanted:
attemptRepository.save(
MultiplicationResultAttempt [user=User [alias=abc], multiplication=Multiplication [factorA=50, factorB=60], resultAttempt=3000, correct=true]
);
-> at microservices.book.multiplication.service.MultiplicationServiceImplTest.checkCorrectAttemptTest(MultiplicationServiceImplTest.java:60)
Actual invocation has different arguments:
attemptRepository.save(
MultiplicationResultAttempt [user=User [alias=abc], multiplication=Multiplication [factorA=50, factorB=60], resultAttempt=3000, correct=true]
);
-> at microservices.book.multiplication.service.MultiplicationServiceImpl.checkAttempt(MultiplicationServiceImpl.java:58)
at microservices.book.multiplication.service.MultiplicationServiceImplTest.checkCorrectAttemptTest(MultiplicationServiceImplTest.java:60)
解决方案
你应该使用:
verify(attemptRepository).save(Matchers.refEq(verifiedAttempt));
我怀疑MultiplicationResultAttempt
没有基于对象字段的相等性实现等于,因此当 Mockito 验证属性时,它不等于您提供的对象,尽管所有字段都具有相同的值。
Matcher.refEq(...)
使用反射来确定值是否相同。
编辑
正如@farhanlq 指出的那样Matchers.refEq(..)
已弃用,ArgumentMatchers.refEq(...)
应改为使用。
推荐阅读
- firebase - 如何防止 Firebase 实时数据库上的垃圾邮件?
- flutter - 如何在 VS 代码中检查字体样式文件
- ios - 离线 FairPlay 播放使网络请求加载 m3u8 播放列表
- amazon-web-services - Kubernetes - 入口控制器的 CertificateNotFound
- kotlin - @Test 提供未解决的参考 - Kotlin
- swift - iOS 14 SwiftUI UIViewRepresentable updateUIView 没有检测到 ObservedObject 的变化?
- python - 找不到包 mysql.connector
- java - Java中这种类型的泛型类是什么意思?
- node.js - 如何添加 JWT 令牌认证以保护路由
- python - 如何使用 pip 安装特定版本的 numpy?