我正在开发一个 Android 项目,我想使用 Room 库将资源的 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.Uri 中的方法解析未被模拟。有关详细信息,请参阅https://developer.android.com/r/studio-ui/build/not-mocked。
在 android.net.Uri.parse(Uri.java)
我对 Android 开发非常陌生,这是我的第一个项目。你能帮我解决这个错误吗?
我创建了一个测试函数来测试名为
uriToString(uri: Uri?): String?
的 TypeConverter。
我期望 TypeConverter 在转换后返回期望的字符串,并且测试函数会通过。
测试功能失败并显示消息:
ConverterTest.kt 处的 java.lang.RuntimeException:165
要测试您的
stringToUri
转换器,您需要使用Android的仪器测试而不是常规的单元测试。仪器测试在 Android 设备或模拟器上运行,并且可以访问 Android 特定的类和方法。
以下是如何为转换器创建仪器测试:
为您的转换器创建一个 Android Instrumented Test 类。您可以通过右键单击 Android Studio 中的应用程序模块,选择“新建”->“Java 类”,然后选择“Android Instrumented Test”来完成此操作。
在您的仪器测试类中,导入必要的 Android 测试库并设置测试。
import android.net.Uri
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class UriConverterInstrumentedTest {
private val context = InstrumentationRegistry.getInstrumentation().context
private val converter = YourTypeConverter() // Replace with your actual TypeConverter
@Test
fun testStringToUri_validString_returnsUri() {
val expectedUri = Uri.parse("content://media/external/audio/media/42")
val actualUri = converter.stringToUri("content://media/external/audio/media/42")
assertEquals(expectedUri, actualUri)
}
// Add more tests as needed
}
在上面的代码中,将
YourTypeConverter
替换为 TypeConverter 的实际类名。
仪器测试旨在与 Android 特定的代码和库配合使用,因此您应该能够使用这种方法成功测试您的 TypeConverter。