2010-06-14 91 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