Java – “XmlPullParserFactory not mocked” issue when unit testing

“XmlPullParserFactory not mocked” issue when unit testing… here is a solution to the problem.

“XmlPullParserFactory not mocked” issue when unit testing

I’m doing unit tests that include parsing data using the XStream parser. I use Mockito to simulate the context. But the test case fails with an error log:

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)

The error occurred in the following code block “response = (MetadataResponse)xs.fromXML(iStream); “Okay

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);

According to Android: XmlPullParserFactory.newInstance() creating a null factory answer, I added

testOptions {
    unitTests.returnDefaultValues = true
}

In build.gradle.

The

following log of NullPointer Exception appears after the update.

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)

Can anyone help me with this

Solution

If you don’t think it’s a good idea to mock XmlPullParser, you’d rather write tests against a real parser so you can check that your code is actually parsing the real XML document correctly, here’s how to fix it:

Simply add this xmlpull dependency to your app’s gradle file:

testImplementation group: 'xmlpull', name: 'xmlpull', version: '1.1.3.1' 

It will only be used to run unit tests and will not be packaged into your APK

Related Problems and Solutions