Android 单元测试 Xml.newSerializer() 总是 return null

Android Unit test Xml.newSerializer() always return null

我正尝试在 Android 单元测试 class 使用 XmlSerializer但出于某种原因,Xml.newSerializer 总是 returns 为空。不过,使用 xmlSerializer 的应用程序代码运行良好。有谁知道为什么单元测试时它只有 returns 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。谢谢。

Android平台提供了很多类。单元测试 运行 针对计算机库中的存根版本。他们存根于他们的方法将 return null.

问题似乎出在 Xml.newSerializer() - Xml 的存根版本将从该方法调用中 return null

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

另一个选项是安装 Robolectric。这为存根提供了可行的替代方案,使您可以在不使用模拟器的情况下执行单元测试。

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

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

只需确保将 testImplementation 'net.sf.kxml:kxml2:2.3.0' 添加到 build.gradle

中的依赖项