在JVM上使用Android XmlPullParser进行单元测试

6

我正在为我的应用程序设置单元测试用例。

该应用程序的关键部分使用org.xmlpull.v1.XmlPullParser解析XML文件。由于此部分是低级别的、与活动、上下文、视图等隔离且独立的,因此我真的希望它可以在JVM上本地运行,以避免一直插入或模拟设备。

但是当在JVM上运行类似以下内容的东西时:

XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, null);
...

I get the famous:

Exception in thread "main" java.lang.RuntimeException: Stub!
    at android.util.Xml.newPullParser(Xml.java:15)
    ...

有没有什么办法可以避免这种情况?
2个回答

2

0

就像之前的评论一样,我认为Robolectric是正确的选择。

我认为代码示例可能会很有用,所以这是我的:

将依赖项添加到您的build.gradle中: 如果您正在使用android支持库:testImplementation 'org.robolectric:robolectric:3.8'(AndroidX从4.0开始)

对于其他版本:https://mvnrepository.com/artifact/org.robolectric/robolectric

然后在测试中:(这是Kotlin)

@RunWith(RobolectricTestRunner::class)
class XmlParserRelTest {
  private lateinit var xmlParserClass : XmlParserClass 

  @Before
  internal fun setUp() {
      xmlParserClass = XmlParserRel(Xml.newPullParser())
  }

  @Test
  fun validFile_parseRelFile_contentIsPresent() {
      val inputStream = getFileInputStream("test.xml")

      val xmlOutput = xmlParserClass.parseRelFile(inputStream )
    
      assertThat(xmlOutput.attribute1).isEqualTo("something")
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接