Junit测试的线路覆盖率为100%

时间:2013-08-22 16:07:18

标签: java junit

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try
{
    builder = factory.newDocumentBuilder();
}
catch (ParserConfigurationException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}
try
{
    doc = builder.parse(entity.getContent());
}
catch (IllegalStateException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (SAXException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

我正在使用dom将xml文件解析为string。如何编写单元测试以捕获100%的线路覆盖率。我正在使用每个模拟器。

2 个答案:

答案 0 :(得分:1)

你没有,因为它毫无意义。

如果您的经理不理解,那么以下是测试方法:

  • DocumentBuilderFactory描述了用于配置解析器的机制。通过更改系统属性,您可以将自己的(模拟)类用作工厂。它可以抛出异常。
  • 格式错误的XML会引发
  • SaxException。创建一些格式错误的XML并将其传递给您的代码。
  • 当你的论证是IllegalStateException时,会抛出
  • null。所以通过null

我应该纠正自己:这不是没有意义的。如果您成功获得100%的覆盖率,您将发现应该修复您的异常处理。如上所述,您的代码会在异常后继续运行(直到它获得NPE),这是不应该的。

答案 1 :(得分:0)

IllegalStateException将从空URI中抛出。

如果发生任何解析器错误(例如格式不正确的文档),

SAXException将被抛出。

只有在您为工厂提供的配置阻止它创建对象时,

ParserConfigurationException才会被抛出。

但是,这些异常并不需要进行测试,因为您所做的只是打印堆栈跟踪。并不总是需要获得100%的代码覆盖率,尤其是在这样的情况下,您只需要测试Java库的已知功能。

如果异常中有逻辑,则可以通过将逻辑拉出到方法中来测试逻辑。

e.g。

public void printStackTrace(Exception e){
    e.printStackTrace();
}

这是一种易于测试的方法,不需要您在代码的不同部分找到触发异常的方法。