我有一个带有一些逻辑和异常块的方法,想测试异常块中的内容。
方法:
Class Validator() {
protected Validator(blah,blah) {
}
protected boolean doStuff(String a, String b) {
try {
isValidInput(a){
} catch (Exception e) {
b = "unknown error"
}
}
测试用例:
@Test
public void testException() {
Validator testValidator = new testValidator(blah, blah);
Validator spy = spy(testValidator);
String var2 = "unknown error"
doReturn(new Exception()).when(spy.doStuff(var1, var2));
assertEquals("unknown error", var2);
}
我如何强制真正的方法进入异常块并继续存根?
首先,忘记使用spy
-如果isValidInput
能够抛出异常,那么让它抛出异常。
如果在isValidInput()
中使用的合作者可以抛出Exception
,那么使用Mockito模拟。如果这只是你的代码,那么你应该能够设置a
,这样它就会产生一个异常。
您仍然需要在isValidInput()
上编写一套完整的测试-研究使用@Test注释中的expected
选项(我假设您在这里使用JUnit)来指定抛出异常是测试的预期结果。但是请不要抛出Exception
-使用它的一个有意义的子类:-)
和@Dave Newton评论,测试var2
是永远不会将工作在doStuff
的范围之外。