java - 如何模拟私有(private)静态方法的解析异常?

标签 java unit-testing mockito powermockito

我有以下方法:

    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/

相关文章:

java - 预期 Mockito 测试异常

java - Mockito - Unmocked 方法无法返回对象本身

java - 显示使用自定义注释注释的方法/构造函数的警告?

unit-testing - 单元测试Grails Controller

c++ - 在Google Test中,面对assertion failures如何做tear down?

python - 如何在 unittest 测试用例中退出脚本

android - Mockito 和回调返回 "Argument(s) are different!"

java - 使用Spring MVC如何获取用户提交后的表单数据?

java - OnDelete 级联失败并出现约束冲突错误 () Hibernate

java - 在 ClassUnderTest 中模拟公共(public)方法调用 |处理 ArrayList