我有一个名为 method1 的方法,它接受一个在 myManager 上调用的 double 值 我传递给这个 65.888 * 60。当我尝试验证这个时,我遇到了浮点问题。验证失败。它期望 3953.28 但 3953.280029296875
verify(myManager, times(1)).method1(65.888 * 60d);
无论如何我可以让这个验证对浮点检查进行模糊检查。就像您使用 assertEquals 在末尾输入增量一样。
谢谢
最佳答案
您可以捕获值(value),例如
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;
}
}));
更新:
您可以使用 AdditionalMatchers.eq(double, double)
而不是使用上述任何一种方法。相反,例如:
verify(myManager).method1(AdditionalMatchers.eq(expected, delta));
尽管使用AdditonalMatchers
根据文档,明智地匹配器:
AdditionalMatchers provides rarely used matchers, kept only for somewhat compatibility with EasyMock. Use additional matchers very judiciously because they may impact readability of a test. It is recommended to use matchers from Matchers and keep stubbing and verification simple.
关于java - Mockito - 验证 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16335508/