在 JVM 上使用 Android XmlPullParser 进行单元测试
Unit testing with Android XmlPullParser on the JVM
我正在尝试为我的应用程序设置单元测试用例。
应用程序的关键部分使用 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)
...
有办法解决这个问题吗?
我设法通过使用 Robolectric in Android-Studio. I followed this tutorial, and stumbled upon 解决了这个问题。
现在它工作正常,除了 当 运行 测试时。
就像之前的评论一样,我认为 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")
}
}
我正在尝试为我的应用程序设置单元测试用例。
应用程序的关键部分使用 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)
...
有办法解决这个问题吗?
我设法通过使用 Robolectric in Android-Studio. I followed this tutorial, and stumbled upon
现在它工作正常,除了
就像之前的评论一样,我认为 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")
}
}