首页 > 解决方案 > 使用 ProviderTestRule 测试 DocumentProvider

问题描述

我有一个 DocumentProvider,它由磁盘上的文件支持,我想用仪器测试进行测试。不幸的是,我找不到推荐的方法来做到这一点。在文档中ProviderTestCase2,似乎它将与IsolatedContext.

这样做的新方法似乎是ProviderTestRule,但我无法让它与任何工作DocumentProvider

我的清单:

<application>

    <provider
        android:authorities="${documentsAuthority}"
        android:name="com.example.asd.MyProvider"
        android:exported="true"
        android:enabled="true"
        android:grantUriPermissions="true"
        android:permission="android.permission.MANAGE_DOCUMENTS">
        <intent-filter>
            <action android:name="android.content.action.DOCUMENTS_PROVIDER"/>
        </intent-filter>
    </provider>
</application>

我的仪器测试:

@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {

    @get:Rule
    public val permission = GrantPermissionRule.grant(Manifest.permission.MANAGE_DOCUMENTS)
    @get:Rule
    public val rule = ProviderTestRule.Builder(VaultDocumentProvider::class.java, BuildConfig.DOCUMENTS_AUTHORITY).build()

    // any test goes here

}

当我运行测试时,它会在初始化时引发异常ProviderTestRule

java.lang.SecurityException: Provider must be exported
at android.provider.DocumentsProvider.attachInfo(DocumentsProvider.java:168)
at androidx.test.rule.provider.ProviderTestRule$Builder.createProvider(ProviderTestRule.java:529)
at androidx.test.rule.provider.ProviderTestRule$Builder.build(ProviderTestRule.java:482)
at com.example.asd.ExampleInstrumentedTest.<init>(ExampleInstrumentedTest.kt:22)

我已经尝试了 Provider 的所有排列exportedpermission但无济于事。ProviderTestRule 不是这里的路吗?我用错了吗?还是某处有错误?

标签: androidandroid-testingdocument-provider

解决方案


推荐阅读