java - 为不太可能的场景创建单元测试,这值得吗?

标签 java unit-testing

对于下面的方法,有没有办法创建单元测试来引发DatatypeConfigurationException,这样我就可以测试它抛出了ConversionException

这是我的代码:

public static XMLGregorianCalendar getXMLGregorianCalendar(final LocalDate localDate) {
    XMLGregorianCalendar xmlGregorianCalendar = null;
    if (localDate != null) {
        final String dateString = localDate.format(yyyMMddFormat);
        try {
            xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(dateString);
        } catch (DatatypeConfigurationException e) {
            throw new ConversionException("Unable to format LocalDate.", e);
        }
    }

    return xmlGregorianCalendar;
}

最佳答案

您可以通过设置系统属性和要实例化的类名来覆盖工厂将创建的实现。然后该类可以在该方法中抛出异常。

比如像这样

public class FailingDatatypeFactory implements DatatypeFactory {
   public XMLGregorianCalendar newXMLGregorianCalendar() { throw new DatatypeConfigurationException() }
}

然后像这样设置

System.setProperty("javax.xml.datatype.DatatypeFactory", FailingDatatypeFactory.class.getName());

现在,在您运行测试用例之后,您应该清除该属性,这样其他测试就不会尝试实例化该实现。

关于java - 为不太可能的场景创建单元测试,这值得吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54149191/

相关文章:

c# - 如何在没有 try/catch block 的情况下记录单元测试中抛出的异常?

java - Java中如何快速判断一个方法是否被重写

java - 如何在后视正则表达式中使用限定符(* 或 +)?

java - 从 java 建立连接时,我们是否需要在 VM TrustStore 中添加经过验证的 CA?

java - 调用 method.getReturnType().newInstance()(静态内部类的静态方法)时出现 InstantiationException

javascript - 使用 import * 导入的 jest 模拟模块来测试 react 组件

java - 是否可以修改 .jar 文件而不创建全新的文件?

unit-testing - Grails:从模拟服务返回模拟对象

java - 代码覆盖率未达到类声明

python - 在 Python 3 中,如何修补模块内的函数以进行单元测试?