2010-06-14 67 views
4

主要方法:为什么不介绍主要方法?

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(); 

} 

测试用例:不包括显示为从String configXML = args[0];在主方法 线

@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(); 
} 

覆盖输出。

+4

您正在以某种不同的方式编写测试。通常,单元测试可以选择失败。你的将永远通过。 – 2010-06-14 09:08:31

+0

是否将EXPECTED_NUMBER_OF_ARGUMENTS设置为3?此外,在第一次尝试/捕获,我会有一个assert.Fail,因为你不希望这部分测试引发异常。 – Paolo 2010-06-14 09:08:46

+0

是的,3。无论它抛出异常与否,重点是覆盖显示的主要方法都没有涉及。 – 2010-06-14 09:19:56

回答

4
  • assertTrue(true);是一个毫无意义的无操作
  • 删除调用XFRCompiler.main(args);周围的try/catch,因为它是所有吞下excpetions并调试困难;那么很可能你会看到一个异常,告诉你问题在哪里。
  • 在拨打XFRCompiler.main(new String[]{"",""});后应该拨打电话fail(),因为您预计它会抛出异常
  • 将两个呼叫置于不同的测试方法中。
2

我很担心所有那些assertTrue(true)。如果不能有例外,那么assert就没有必要了。如果有意外的异常,那么这段代码会吞下它,你将会看到你现在看到的行为。

然后,如果你期待一个例外,你应该像这样的代码:

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

这样,错误类型的异常和异常信息将被检查。 PS:不要用“紧急”的方式发布问题。我们已经尽可能快地提供帮助。

+0

感谢您的回答。 即使它可以通过,但覆盖率报告仍显示为主要方法未被覆盖。 – 2010-06-14 09:15:51

+0

在调试器中运行代码以使100%确定它实际执行这些行。可能有些东西我们错过了。 – 2010-06-14 16:03:55