首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复Junit和Mockito中的“参数不同!”

如何修复Junit和Mockito中的“参数不同!”
EN

Stack Overflow用户
提问于 2019-08-28 10:55:37
回答 2查看 7K关注 0票数 3

在执行涉及包含JUnit ()方法的方法的verify.save测试用例时,我得到以下错误‘参数是不同的!

代码语言:javascript
复制
@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);
}

我得到以下错误消息。

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-28 11:16:06

你应该使用:

代码语言:javascript
复制
verify(attemptRepository).save(Matchers.refEq(verifiedAttempt));

我怀疑MultiplicationResultAttempt没有基于对象字段的相等实现等于,所以当Mockito验证属性时,它并不等于您提供的对象,尽管所有字段都具有相同的值。

Matcher.refEq(...)使用反射来确定值是否相同。

编辑

正如@farhanlq指出的那样,应该使用Matchers.refEq(..)代替ArgumentMatchers.refEq(...)

票数 5
EN

Stack Overflow用户

发布于 2021-01-26 12:35:32

我在MultiplicationResultAttempt中实现了等于和哈希码,而且它成功了!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57690810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档