Android Unit测试Xml.newSerializer()始终返回null

时间:2016-11-01 15:17:48

标签: android unit-testing mockito android-espresso

我正在尝试 Android 单元测试使用XmlSerializer的类但由于某种原因,Xml.newSerializer始终返回null。使用xmlSerializer的应用代码运行正常。有谁知道为什么它只在单元测试时返回null?

import org.junit.Test;
import org.xmlpull.v1.XmlSerializer;

public class TestClass
{
    @Test
    public void test()
    {
        XmlSerializer serializer = Xml.newSerializer();
        if (serializer == null) {
            System.out.println("Is Null!");
        }
    }
}

我使用的测试框架是Espresso和Mockito。感谢。

2 个答案:

答案 0 :(得分:1)

Android平台中提供了许多类。在计算机的库中对这些的存根版本运行单元测试。他们的方法是返回null

问题似乎是Xml.newSerializer() - Xml的存根版本只会从此方法调用中返回null

一种可行的解决方法是运行此单元测试androidTest而不是test。然后,您必须在设备上而不是在计算机上运行单元测试。

另一个选择是安装Robolectric。这提供了存根的工作替代方案,允许您在不使用仿真器的情况下执行单元测试。

答案 1 :(得分:0)

您可以尝试使用不依赖于Android平台的org.xmlpull.v1.XmlPullParserFactory

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlSerializer serializer = factory.newSerializer();

只需确保将testImplementation 'net.sf.kxml:kxml2:2.3.0'添加到build.gradle中的依赖项