2013-06-03 47 views
0

为了运行一堆JUnit测试用例,我使用了一个JUnit测试套件,并且没有发生错误并且没有失败,并且所有测试都正常运行,但我收到以下消息显示在控制台中,我不知道什么是它的意思是:运行JUnit测试套件时发生致命错误

[Fatal Error] :1:1: Premature end of file. 

当我使用错误处理程序我得到了以下结果:

caught exception(fatal error) 
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file. 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) 
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source) 
    at com.nc.inotify.dp.xml.impl.XmlSource.convert(XmlSource.java:328) 
    at com.nc.inotify.dp.xml.impl.XmlSource.update(XmlSource.java:299) 
    at com.nc.inotify.dp.xml.junit.TXmlSource.testUpdate(TXmlSource.java:106) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

,这就是包含错误的方法:

private Document convert(String xml) throws ParserConfigurationException, 
      SAXException, IOException { 

     // convert String into InputStream 
     InputStream is = new ByteArrayInputStream(xml.getBytes()); 

     // convert InputStream to Document 
     domFactory = DocumentBuilderFactory.newInstance(); 
     domFactory.setNamespaceAware(true); 
     builder = domFactory.newDocumentBuilder(); 
     builder(builder); 
     is.reset(); 
     Document doc = builder.parse(is); 
     is.close(); 

     return doc; 
    } 
+4

我认为“胎儿的错误”是什么否则完全... –

+0

这是在Eclipse中吗? –

+0

@MattewFarwell是的,它在日食 –

回答

2

这看起来像来自您的萨克斯解析器(或您使用的任何XML解析器)的错误。要找到错误,请尝试添加一个ErrorHandler到xml处理。例如,对于一个DocumentBuilder的,你可以可以调用的setErrorHandler():

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = dbf.newDocumentBuilder(); 
builder.setErrorHandler(new ErrorHandler() { 

    @Override 
    public void warning(SAXParseException exception) throws SAXException { 
    System.err.println("warning: caught exception"); 
    exception.printStackTrace(System.err); 
    } 

    @Override 
    public void fatalError(SAXParseException exception) throws SAXException { 
    System.err.println("fatalError: caught exception"); 
    exception.printStackTrace(System.err); 
    } 

    @Override 
    public void error(SAXParseException exception) throws SAXException { 
    System.err.println("error: caught exception"); 
    exception.printStackTrace(System.err); 
    } 
}); 

这会给你一个正在发生的事情更好的线索。

欲了解更多信息,请看com.sun.org.apache.xerces.internal.util.DefaultErrorHandler#fatalError,这是我相信什么是创建此错误消息。

编辑:随着堆栈跟踪,以及额外的代码,它看起来像之一:

  1. xml是空
  2. xml具有从您在XML中指定的一个不同的编码。

为了验证2,你的XML包含非ASCII字符,还是在XML具有正确的编码是一个正确声明,例如:

<?xml version="1.0" encoding="us-ascii"?> 
<?xml version="1.0" encoding="windows-1252"?> 
<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml version="1.0" encoding="UTF-8"?> 
<?xml version="1.0" encoding="UTF-16"?> 
+0

我使用的XPath不是SAX,我不知道这是什么logger.error的事情。你能帮我吗? –

+0

用System.err.println/printStackTrace替换logger.error。 XPath不应该有所不同,尝试添加错误处理程序。 –

+0

我刚刚使用错误处理程序(请看问题) –

相关问题