2010-06-14 4 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(); 

} 

TestCase:

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

выходы Покрытие отображаются в виде строки из String configXML = args[0]; в основной метод не покрыты.

+4

Вы пишите тесты таким образом, что это своего рода ... разные. Как правило, модульные тесты имеют возможность отказа. Ваш всегда будет проходить. –

+0

Установлен ли EXPECTED_NUMBER_OF_ARGUMENTS в 3? Кроме того, в этой первой попытке/catch у меня будет файл assert.Fail, так как вы не ожидаете, что эта часть теста выйдет за исключением. – Paolo

+0

есть, 3. неважно, что это исключает или нет, точка - это охват, отображаемый в качестве основного метода. –

ответ

4
  • assertTrue(true); не является бессмысленным не оп
  • Удалите TRY/поймать вокруг вызова XFRCompiler.main(args);, так как все это делает глотать excpetions и сделать отладку сложнее; скорее всего, вы увидите исключение, которое сообщит вам, где проблема.
  • Там должен быть вызов fail() после вызова XFRCompiler.main(new String[]{"",""});, так как вы ожидаете, что это бросить исключение
  • Положите два вызова в отдельных методах испытаний.
2

Я беспокоюсь обо всех этих assertTrue(true). Если исключение не может быть, то утверждение не требуется. Если есть непредвиденное исключение, то этот код проглотит его, и вы получите то поведение, которое видите прямо сейчас.

Затем, если вы ожидаете, исключение, вы должны кода, как это:

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

Таким образом, будут проверены неправильные типы исключения и сообщения исключений.

PS: Не отправляйте вопросы с «срочными». Мы уже помогаем так быстро, как можем.

+0

Спасибо за ваш ответ. Даже он может пройти, но отчеты о покрытии по-прежнему отображаются, поскольку основной метод не был покрыт. –

+0

Запустите код в отладчике, чтобы убедиться, что он действительно выполняет эти строки на 100%. Может быть, чего-то нам не хватает. –

Смежные вопросы