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

问题描述 投票:0回答:1

我正在开发一个 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

android android-room android-espresso
1个回答
0
投票

要测试您的

stringToUri
转换器,您需要使用Android的仪器测试而不是常规的单元测试。仪器测试在 Android 设备或模拟器上运行,并且可以访问 Android 特定的类和方法。

以下是如何为转换器创建仪器测试:

  1. 为您的转换器创建一个 Android Instrumented Test 类。您可以通过右键单击 Android Studio 中的应用程序模块,选择“新建”->“Java 类”,然后选择“Android Instrumented Test”来完成此操作。

  2. 在您的仪器测试类中,导入必要的 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. 要运行仪器测试,请右键单击您的测试类并选择“运行”。

仪器测试旨在与 Android 特定的代码和库配合使用,因此您应该能够使用这种方法成功测试您的 TypeConverter。

© www.soinside.com 2019 - 2024. All rights reserved.