我有一个名为 method1 的方法,它采用在 myManager 上调用的双精度值
我正在传递这个 65.888 * 60。当我尝试验证这一点时,我遇到了浮点问题。验证失败。它预计 3953.28 但 3953.280029296875
verify(myManager, times(1)).method1(65.888 * 60d);
无论如何,我可以让这个验证对浮点检查进行模糊检查吗?就像使用assertEquals 一样,在最后输入一个增量。
Thanks
您可以捕获该值,例如
final ArgumentCaptor<Double> captor = ArgumentCaptor.forClass(Double.class)
...
verify(myManager).method1(captor.capture());
然后断言:
assertEquals(expected, captor.getValue(), delta)
或者,也许,使用一个参数匹配器来执行断言:
verify(myManager).method1(doubleThat(new ArgumentMatcher<Double>()
{
@Override
public boolean matches(final Object actual)
{
return Math.abs(expected - (Double) actual) <= delta;
}
}));
Update:
除了使用上述任一方法之外,您还可以使用AdditionalMatchers.eq(double, double) http://docs.mockito.googlecode.com/hg/org/mockito/AdditionalMatchers.html#eq%28double,%20double%29相反,例如:
verify(myManager).method1(AdditionalMatchers.eq(expected, delta));
虽然使用AdditonalMatchers http://docs.mockito.googlecode.com/hg/org/mockito/AdditionalMatchers.html根据文档,明智地匹配器:
ExtraMatchers 提供了很少使用的匹配器,保留它只是为了与 EasyMock 保持一定程度的兼容性。非常明智地使用其他匹配器,因为它们可能会影响测试的可读性。建议使用 Matchers 中的匹配器并保持存根和验证简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)