java - Mockito - 验证 double 值

标签 java unit-testing mockito

我有一个名为 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/

相关文章:

java - 在多个进程中使用 sqlitejdbc

android - 如何避免使用 mockito 的 onPause()?

c# - 你在单元测试中使用 TestContext 吗?

java模拟: is there a way to fake a class that doesnt exists?

java - Play 请求中的模拟查询字符串

java - 如何在Android中设置默认启用禁用属性

java - 域模式下jboss中的虚拟部署目录

java - 在后台运行线程

unit-testing - 是否可以使用 Pit Mutation Test 提取每种测试方法的突变测试结果

javascript - 如何在 React with Jest(无 enzyme )中测试功能组件的状态