为什么主要方法没有涵盖?

时间:2010-06-14 09:01:00

标签: java code-coverage

主要方法:

 public static void main(String[] args) throws Exception
{
    if (args.length != EXPECTED_NUMBER_OF_ARGUMENTS)
    {
        System.err.println("Usage - java XFRCompiler ConfigXML PackageXML XFR");
    }

    String configXML = args[0];
    String packageXML = args[1];
    String xfr = args[2];

    AutoConfigCompiler compiler = new AutoConfigCompiler();
    compiler.setConfigDocument(loadDocument(configXML));
    compiler.setPackageInfoDoc(loadDocument(packageXML));
    // compiler.setVisiblityDoc(loadDocument("VisibilityFilter.xml"));
    compiler.compileModel(xfr);     

}

private static Document loadDocument(String fileName) throws Exception
{
    TXDOMParser parser = (TXDOMParser) ParserFactory.makeParser(TXDOMParser.class.getName());
    InputSource source = new InputSource(new FileInputStream(fileName));
    parser.parse(source);
    return parser.getDocument();  

}

测试用例:

@Test
public void testCompileModel() throws Exception
{
  // construct parameters
  URL configFile =   Thread.currentThread().getContextClassLoader().getResource("Ford_2008_Mustang_Config.xml");
  URL packageFile = Thread.currentThread().getContextClassLoader().getResource("Ford_2008_Mustang_Package.xml");
  File tmpFile = new File("Ford_2008_Mustang_tmp.xfr");
  if(!tmpFile.exists()) {
     tmpFile.createNewFile();
  }

  String[] args = new     String[]{configFile.getPath(),packageFile.getPath(),tmpFile.getPath()};

  try {
    // test main method
    XFRCompiler.main(args);
  } catch (Exception e) {
    assertTrue(true);
  }
  try {
    // test args length is less than 3
    XFRCompiler.main(new String[]{"",""});
  } catch (Exception e) {  
    //ignore
  }
  tmpFile.delete(); 
}

覆盖范围输出显示为main方法中String configXML = args[0];的行 不包括在内。

2 个答案:

答案 0 :(得分:4)

  • assertTrue(true);是无意义的无操作
  • 删除调用XFRCompiler.main(args);周围的try / catch,因为它所做的只是吞下激活并使调试更难;很可能你会看到一个异常,告诉你问题出在哪里。
  • 在调用fail()之后应该调用XFRCompiler.main(new String[]{"",""});,因为您希望它会引发异常
  • 将两个调用放在不同的测试方法中。

答案 1 :(得分:2)

我很担心所有assertTrue(true)。如果不存在异常,则不需要断言。如果出现意外异常,那么此代码将吞下它,您将获得您现在看到的行为。

然后,如果你期望一个异常,你应该像这样编码:

try {
    ... code that will throw an exception ...
    fail("No exception was thrown");
} catch (SpecficTypeOfException e) {
    assertEquals("message", e.getMessage());
}

这样,将检查错误类型的异常和异常消息。

PS:不要发布“紧急”问题。我们已尽快提供帮助。