在执行涉及包含JUnit ()方法的方法的verify.save测试用例时,我得到以下错误‘参数是不同的!
@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)发布于 2019-08-28 11:16:06
你应该使用:
verify(attemptRepository).save(Matchers.refEq(verifiedAttempt));我怀疑MultiplicationResultAttempt没有基于对象字段的相等实现等于,所以当Mockito验证属性时,它并不等于您提供的对象,尽管所有字段都具有相同的值。
Matcher.refEq(...)使用反射来确定值是否相同。
编辑
正如@farhanlq指出的那样,应该使用Matchers.refEq(..)代替ArgumentMatchers.refEq(...)。
发布于 2021-01-26 12:35:32
我在MultiplicationResultAttempt中实现了等于和哈希码,而且它成功了!
https://stackoverflow.com/questions/57690810
复制相似问题