2017-04-06 55 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的集成,必需的。