Тестирование DocumentProvider с ProviderTestRule - PullRequest
1 голос
/ 02 мая 2020

У меня есть 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)

Я перепробовал все перестановки exported, permission et c для провайдера, но безрезультатно. Разве ProviderTestRule - это не путь к go здесь? Я использую это неправильно? Или есть где-то ошибка?

...