eq()匹配器可以应用于double吗?

时间:2019-06-28 10:59:34

标签: unit-testing mockito

对于存根方法的参数,有一个关于匹配器的规则:所有参数都是匹配器。如果匹配器与原始值组合,将抛出InvalidUseOfMatchersException。在这种情况下,eq()匹配器将有所帮助。例如,我要验证除以0的任何整数都会引发MyException。存根的div()有两个参数。第一个由anyInt()给出,第二个由eq(0)而不是原始0给出。

public interface MatcherDemo {
     double div(int x, int y) throws Exception;
}

@Test(expected = MyException.class)
public void test() throws Exception {
    when(demo.div(anyInt(), eq(0))).thenThrow(new MyException());
    demo.div(5, 0);
}

但是,我发现eq()匹配器无法应用于double。如果div()的签名被修改,例如:

double div(double x, double y) throws Exception;

然后Mockito将抛出InvalidUseOfMatchersException。

我想知道这是否是因为不能精确地进行double的比较,我该怎么办?

1 个答案:

答案 0 :(得分:0)

我不确定您尝试了什么,但是使用了

when(demo.div(anyDouble(), eq(0d))).thenThrow(new MyException());

似乎没有任何问题。

也许您忘记将eq(0)表达式也更改为double了?
但是在那种情况下,我会收到一个UnnecessarStubbing异常,因为它没有映射到正确的方法。

(已通过JUnit 5和Mockito 2.27.0测试)