我正在进行一个Android项目,我想使用RoomLibrary将资源的 URI 存储在 Database 中。
由于Room不支持复杂数据类型,所以我创建了一个名为stringToUri(string: String?): Uri?
的TypeConverter。
下面是类型转换器的定义:
@TypeConverter
fun stringToUri(string: String?): Uri? {
return Uri.parse(string)
}
现在我想在使用它之前测试转换器。因此,我创建了一个名为converter_uriToString_validUri_returnsString()
的 TestFunciton。
下面是测试函数的定义:
@Test
fun testStringToUri_validString_returnsUri() {
val expectedUri = Uri.parse("content://media/external/audio/media/42") // Line 165
val actualUri = converter.stringToUri("content://media/external/audio/media/42")
assertEquals(expectedUri, actualUri)
}
但测试失败,出现以下错误/消息:
android.net中的方法解析。Uri未被模仿。详情见https://developer.android.com/r/studio-ui/build/not-mocked。
java.lang.RuntimeException:android.net中的方法parse。详情请参见https://developer.android.com/r/studio-ui/build/not-mocked。
在android.net.Uri.parse(Uri.java)
我对Android开发非常陌生,这是我的第一个项目。你能帮我解决这个错误吗?
我做了什么
我创建了一个测试函数来测试名为uriToString(uri: Uri?): String?
的TypeConverter。
我所期望的
我期望TypeConverter在转换后返回期望的字符串,并且测试函数会通过。
实际结果
测试功能失败,并显示以下消息:
java.lang.RuntimeException at ConverterTest.kt:165
1条答案
按热度按时间u5i3ibmn1#
要测试您的
stringToUri
转换器,您需要使用Android的Instrumentation Testing而不是常规的单元测试。插装测试在Android设备或模拟器上运行,可以访问Android特定的类和方法。以下是如何为转换器创建检测测试:
1.为您的转换器创建Android Instrumented Test类。您可以在Android Studio中右键单击您的应用模块,选择“新建”->“Java类”,然后选择“Android仪器化测试”。
1.在插装测试类中,导入必要的Android测试库并设置测试。
在上面的代码中,将
YourTypeConverter
替换为TypeConverter的实际类名。1.要运行插装测试,请右键单击测试类并选择“Run”。
插装测试旨在使用Android特定的代码和库,因此您应该能够使用此方法成功测试TypeConverter。