2017-04-06 54 views
0

我在做单元测试,其中包括使用XStream parser.I数据的分析过程中使用了的Mockito嘲讽context.But测试用例失败,错误日志:“XmlPullParserFactory轻慢不得的”,而问题的单元测试

java.lang.RuntimeException: Method newInstance in org.xmlpull.v1.XmlPullParserFactory not mocked. See http://g.co/androidstudio/not-mocked for details. 

at org.xmlpull.v1.XmlPullParserFactory.newInstance(XmlPullParserFactory.java) 
at com.thoughtworks.xstream.io.xml.XppDriver.createParser(XppDriver.java:57) 
at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:54) 
at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:65) 
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1049) 
at com.att.apis.metadata.MetadataHandler.execute(MetadataHandler.java:38) 
at com.att.apis.services.ServerOperations.executePostOperation(ServerOperations.java:20) 
at com.att.framework.helper.request.MetadataAPIHandler.executeAPIRequest(MetadataAPIHandler.java:58) 
at com.att.framework.helper.request.MetadataAPIHandlerMokitoTest.executeAPIRequest(MetadataAPIHandlerMokitoTest.java:57) 

该错误是在线路发生 “响应=(MetadataResponse)xs.fromXML(IStream的);” 在下面的代码块

InputStream iStream = responseData.getInputStream(); 
     XStream xs = new XStream(); 
     xs.autodetectAnnotations(true); 
     xs.alias("helloa", A.class); 
     xs.alias("hellob", B.class); 
     xs.alias("helloc",C.class); 
     response = (MetadataResponse)xs.fromXML(iStream); 

作为每答案从Android: XmlPullParserFactory.newInstance() creating a null factory,我添加

testOptions { 
    unitTests.returnDefaultValues = true 
} 

in build.gradle。

更新后NullPointer异常发生日志下面。

java.lang.NullPointerException 
at com.thoughtworks.xstream.io.xml.XppDriver.createParser(XppDriver.java:59) 
at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:54) 
at com.thoughtworks.xstream.io.xml.AbstractXppDriver.createReader(AbstractXppDriver.java:65) 
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1049) 
at com.att.apis.metadata.MetadataHandler.execute(MetadataHandler.java:38) 
at com.att.apis.services.ServerOperations.executePostOperation(ServerOperations.java:20) 
at com.att.framework.helper.request.MetadataAPIHandler.executeAPIRequest(MetadataAPIHandler.java:58) 
at com.att.framework.helper.request.MetadataAPIHandlerMokitoTest.executeAPIRequest(MetadataAPIHandlerMokitoTest.java:57) 

谁能帮我理清问题

回答

1

XmlPullParserFactory来自Android平台,因此不能在单元测试,因为它们与Java虚拟机安装在您的计算机上执行被嘲笑。

您可能需要使用Robolectric框架,它允许单元测试,使Android平台的调用(它嘲笑在整个平台几乎一切)

0

你应该重构你的代码位和模拟Xstream和所有它的依赖。例如,您可以创建Xstream,并将其传递给您的待测方法。

Xstream mockXstream = Mockito.mock(Xstream.class); 
    //mock all xstream method calls 

    void myMethodUnderTest(Xstream xs){ 
      InputStream iStream = responseData.getInputStream(); 
      xs.autodetectAnnotations(true); 
      xs.alias("helloa", A.class); 
      xs.alias("hellob", B.class); 
      xs.alias("helloc",C.class); 
      response = (MetadataResponse)xs.fromXML(iStream); 
    } 
0

尝试亚历山大的回答后,我发现,要解决这个问题,你可以简单地添加这个xmlpull依赖于你的测试您的应用程序gradle这个文件,请按照解决

testImplementation组行: 'xmlpull',名称:'xmlpull',版本:'1.1.3.1'//为了在测试中测试与XStream的集成,必需的。