我有以下方法:
public class DateValidation() {
private static boolean isValid(String date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
dateFormat.setLenient(false);
try {
dateFormat.parse(inDate.trim());
}
catch (ParseException pe) {
pe.printStackTrace();
return false;
}
return true;
}
}
到目前为止,这是我的模拟测试:
public void testIsValidDate_Exception() throws Exception {
PowerMockito.spy(DateValidation.class);
PowerMockito.doThrow(new ParseException(null,0)).when(DataValidation.class, "isValidDate", "01/012017");
}
但这就是我陷入困境的地方。如何验证测试是否抛出 ParseException
?如果输入日期的格式错误,那么应该抛出 ParseException
,对吧?
最佳答案
首先,你的方法没有抛出任何异常(你捕获它并返回 false)。那么,如何测试它是否抛出 ParseException。
所以你必须测试该方法是否返回 false,这意味着它抛出了 parseException。
如果您想测试抛出的异常,那么您不应该在方法中捕获它。
其次,您的测试方法名称确实令人困惑,它读取 testIsValidDate
,但您正在测试无效日期抛出异常。
只需这样做
DateValidation spyDateValidation = PowerMockito.spy(DateValidation.class);
boolean result = Whitebox.invokeMethod(spyDateValidation, "isValidDate", "01/012017");
assertFalse(result);
关于java - 如何模拟私有(private)静态方法的解析异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43874289/