gpt4 book ai didi

java - mockito 验证参数顺序

转载 作者:行者123 更新时间:2023-11-28 21:07:31 25 4
gpt4 key购买 nike

我一直在寻找这个,但没有答案。

假设我有一个 Service 类,它使用 Calc 依赖项

Calc 有一个方法 divide

public void divide(int a,int b)

服务这样使用它

public void serviceAMethod{
//do somehting
a=getA();
b=getB();
calc.divide(a,b);
}

我的测试是这样的

@Test
public void serviceAMethod_callsCalc(){
verify(calcMock).divide(a, b);
}

这通过了,但是如果我转到 Calc.divide 并将签名更改为

public void divide(int b,int a)

还是过去了

我如何测试正确的参数是否以正确的顺序传递?

编辑:不一定要和 Mockito 一起使用,如何让这个测试更有弹性?

最佳答案

这是因为传递给 Calc.divide 的值仍然相同。 Mockito 验证传递的值而不是参数的名称。因此,更改 Calc 类中参数的顺序不会影响测试,除非您更改在方法 serviceAMethod 中完成的调用以反射(reflect)更改。

public void serviceAMethod() {
//do somehting
a=getA();
b=getB();
calc.divide(b,a);
}

只有在您更改此逻辑(即您正在测试的内容)之后,您的测试才会失败。

如果您使用实际值,您可以看到这一点:

public void serviceAMethod() {
a=getA(); // EG: 1
b=getB(); // EG: 2
calc.divide(1, 2); // effective call
}

如果您在 Calc 类中交换 a 和 b,它仍将使用值 1、2 调用。您测试以下内容:

verify(calcMock).divide(1, 2);

关于java - mockito 验证参数顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52756694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com