尝试访问测试资源时在 espresso 上获取 Resources$NotFoundException

Getting Resources$NotFoundException on espresso when trying to access test resources

在我的测试运行时尝试访问 androidTest/res 中定义的资源时,我得到 android.content.res.Resources$NotFoundException: String resource ID。我尝试了几件事但没有运气。这不是应该工作吗?我的代码示例:

ExampleInstrumentedTest.kt

@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
    @Test
    fun test() {
        val result = InstrumentationRegistry.getInstrumentation().targetContext.getString(
            com.myproject.test.R.string.my_test
        )
        assertEquals("my test", result)
    }
}

strings.xml

<resources>
    <string name="my_test">my test</string>
</resources>

有人遇到过这个问题吗?

找到解决方案。目前的问题是 InstrumentationRegistry.getInstrumentation().targetContext 将只能访问被测试应用程序中包含的内容,因此在这种情况下我应该使用 InstrumentationRegistry.getInstrumentation().context,它将能够访问测试资源。供参考:

getTargetContext Return 正在检测的目标应用程序的上下文。请注意,这通常与检测代码的上下文不同,因为检测代码通常存在于与 运行 所针对的应用程序不同的包中。请参阅 getContext() 以检索检测代码的上下文。

getContext Return 该工具包的上下文。请注意,这通常与被检测的应用程序的上下文不同,因为检测代码通常存在于与它 运行 所针对的应用程序不同的包中。请参阅 getTargetContext() 以检索目标应用程序的上下文。

来自文档:https://developer.android.com/reference/android/app/Instrumentation