Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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_Mockito - Fatal编程技术网

Java 当没有有效的匹配器时,使用Mockito是否有办法在方法调用上引发异常

Java 当没有有效的匹配器时,使用Mockito是否有办法在方法调用上引发异常,java,mockito,Java,Mockito,我有一个模拟类,当没有有效的匹配器时,我想抛出一个异常,而不是返回null。莫基托能做到这一点吗?我的想法是,我模拟了该方法,使其能够处理某些参数。当这些都不匹配时,不要返回null,而是抛出异常。您可以编写自定义org.mockito.stubing.Answer,并将其与一起使用,然后使用Answer: private final static String EXCEPTION_MSG = "no valid matchers"; private final static

我有一个模拟类,当没有有效的匹配器时,我想抛出一个异常,而不是返回
null
。莫基托能做到这一点吗?我的想法是,我模拟了该方法,使其能够处理某些参数。当这些都不匹配时,不要返回
null
,而是抛出异常。

您可以编写自定义
org.mockito.stubing.Answer
,并将其与
一起使用,然后使用Answer

private final static String EXCEPTION_MSG = "no valid matchers";
private final static String A = "A", B = "B";
private final static Map<String, String> argsReturnVal = new HashMap<>();

static {
    argsReturnVal.put(A, B);
}

private static final Answer<String> throwAnswer = a ->
        argsReturnVal.computeIfAbsent(
                a.getArgument(0),
                mf -> { throw new IllegalArgumentException(EXCEPTION_MSG); }
        );

@Mock
private Checker<String> checker;

@Before
public void init() {
    MockitoAnnotations.initMocks(this);
    Mockito.when(checker.check(Mockito.anyString())).thenAnswer(throwAnswer);
}

@Test
public void testThrow() {
    Assert.assertEquals(B, checker.check(A));
    try {
        checker.check("X-X-X");
    } catch (IllegalArgumentException ex) {
        Assert.assertEquals(EXCEPTION_MSG, ex.getMessage());
    }
}

private interface Checker<T> {
    String check(T in);
}
private final静态字符串异常\u MSG=“无有效匹配程序”;
私有最终静态字符串A=“A”,B=“B”;
私有最终静态映射argsReturnVal=newhashmap();
静止的{
argsReturnVal.put(A,B);
}
私有静态最终答案throwAnswer=a->
argsReturnVal.computeIfAbsent(
a、 getArgument(0),
mf->{throw new IllegalArgumentException(EXCEPTION_MSG);}
);
@嘲弄
私人支票;
@以前
公共void init(){
initMocks(this);
Mockito.when(checker.check(Mockito.anyString())。然后回答(throwAnswer);
}
@试验
公共void testThrow(){
Assert.assertEquals(B,checker.check(A));
试一试{
检查者。检查(“X-X-X”);
}捕获(IllegalArgumentException ex){
Assert.assertEquals(异常消息,例如getMessage());
}
}
专用接口检查器{
字符串检查(T-in);
}