Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 几个参数的Mockito条件_Java_Unit Testing_Mockito - Fatal编程技术网

Java 几个参数的Mockito条件

Java 几个参数的Mockito条件,java,unit-testing,mockito,Java,Unit Testing,Mockito,我试图模仿一种方法的结果。结果应有两种变化: Mockito.when(class.method(a,b)).thenReturn(c); 如果a-b等于20 如果a-b不是20 我如何才能写出两个不同的语句并返回不同的结果 另外,我知道如何为一个参数使用条件。例如: class MyCondition extends ArgumentMatcher<AClass> { public boolean matches(Object sd) { boo

我试图模仿一种方法的结果。结果应有两种变化:

Mockito.when(class.method(a,b)).thenReturn(c);
  • 如果
    a-b
    等于20
  • 如果
    a-b
    不是20
我如何才能写出两个不同的语句并返回不同的结果

另外,我知道如何为一个参数使用条件。例如:

class MyCondition extends ArgumentMatcher<AClass> {
    public boolean matches(Object sd) {
           boolean toReturn = (sd instanceof AClass) && (sd >15);
           return toReturn;
           }
    } 


Mockito.when(class.method(Mockito.argThat(new MyCondition()),b)).thenAnswer(
    new Answer<BClass>() {
        public BClass answer(InvocationOnMock invocation) {
             return new BClass();
        }
    });
类MyCondition扩展ArgumentMatcher{
公共布尔匹配(对象sd){
布尔返回=(AClass的sd实例)和&(sd>15);
回归回归;
}
} 
when(class.method(Mockito.argThat(new MyCondition()),b))。然后回答(
新答案(){
公共B类应答(调用锁调用){
返回新的BClass();
}
});
但是如何为两个方法参数建立条件呢?

使用:

Mockito.when(instance.method(Mockito.anyInt(),Mockito.anyInt()))
.然后回答(
新答案(){
@覆盖公共整数应答(调用锁调用){
int a=(整数)invocation.getArguments()[0];
int b=(整数)invocation.getArguments()[1];
如果(a-b==20){
返回。。。;
}否则{
返回。。。;
}
}
});

也许mockito不是这里最好的工具。您可以随时扩展该类并使用所需的if语句重写该方法。您可以随时使用
答案
对逻辑进行编码。我想测试使用该方法的类,并模拟该方法的操作。@AndyTurner,我现在认为有可能使用用户答案,但通常只能为一个参数设置条件(使用Mockito.argThat)。我的问题是如何为两个参数建立一个条件。虽然答案是正确的,但我想知道你想在这里做什么。由于无法从输入中确定
a
b
的值,您的被测类是否不确定?这是很奇怪的,可能是一件值得嘲笑的事情。测试用例通常是确定性/静态的,使用这个答案并不能使它具有确定性。如果您的测试用例失败,是因为返回了20还是-20?你不知道,因为你的测试用例涵盖了这两个方面,这使得调试更加困难。。。
Mockito.when(instance.method(Mockito.anyInt(), Mockito.anyInt()))
    .thenAnswer(
        new Answer<Integer>() {
          @Override public Integer answer(InvocationOnMock invocation) {
            int a = (Integer) invocation.getArguments()[0];
            int b = (Integer) invocation.getArguments()[1];
            if (a - b == 20) {
              return ...;
            } else {
              return ...;
            }
          }
        });