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);
}