android 如何在测试时使用Uri.parse()方法?

68de4m5k  于 2023-09-29  发布在  Android
关注(0)|答案(1)|浏览(147)

我正在进行一个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

u5i3ibmn

u5i3ibmn1#

要测试您的stringToUri转换器,您需要使用Android的Instrumentation Testing而不是常规的单元测试。插装测试在Android设备或模拟器上运行,可以访问Android特定的类和方法。
以下是如何为转换器创建检测测试:
1.为您的转换器创建Android Instrumented Test类。您可以在Android Studio中右键单击您的应用模块,选择“新建”->“Java类”,然后选择“Android仪器化测试”。
1.在插装测试类中,导入必要的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的实际类名。
1.要运行插装测试,请右键单击测试类并选择“Run”。
插装测试旨在使用Android特定的代码和库,因此您应该能够使用此方法成功测试TypeConverter。

相关问题