Почему основной метод не покрыт? - PullRequest
4 голосов
/ 14 июня 2010

основной метод:

 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]; в основном методе не покрыты.

Ответы [ 2 ]

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

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

Тогда, если вы ожидаете исключения, вы должны написать код так:

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

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

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

...