【问题标题】:Unit testing with Android XmlPullParser on the JVM在 JVM 上使用 Android XmlPullParser 进行单元测试
【发布时间】:2015-07-07 15:19:00
【问题描述】:

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

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

但是当在 JVM 上运行这样的东西时:

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

我成名了:

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

有没有办法解决这个问题?

【问题讨论】:

    标签: java android unit-testing jvm xmlpullparser


    【解决方案1】:

    我设法通过在 Android-Studio 中使用 Robolectric 解决了这个问题。我关注了this tutorial,偶然发现了this other problem

    现在除了I can't see the standard output 运行测试时它工作正常。

    【讨论】:

      【解决方案2】:

      就像之前的评论一样,我认为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")
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-07-06
        • 1970-01-01
        • 2020-02-22
        • 1970-01-01
        • 1970-01-01
        • 2015-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多