SMSを読み取るアプリケーションがあります。アプリはデバッグ時に正常に動作しますが、Androidインストルメントされたテストを使用してテストすると、次のエラーがスローされます
Java.lang.SecurityException: Permission Denial: reading com.Android.providers.telephony.SmsProvider
これは私のテストケースです
@RunWith(AndroidJUnit4.class)
public class SmsFetcherTest {
@Test
public void fetchTenSms() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getContext();
// Fails anyway.
// assertTrue(ContextCompat.checkSelfPermission(appContext,
// "Android.permission.READ_SMS") == PackageManager.PERMISSION_GRANTED);
List<Sms> tenSms = new SmsFetcher(appContext)
.limit(10)
.get();
assertEquals(10, tenSms.size());
}
}
インストゥルメンテーションテストは初めてです。これはこれを行う適切な方法ですか?
それとも何か不足していますか?
GrantPermissionRule
を使用します。方法は次のとおりです。
次の依存関係をapp/build.gradle
に追加します。
dependencies {
...
androidTestImplementation 'com.Android.support.test:rules:1.0.2'
}
次のコードをInstrumentedTest
クラスに追加します。
import androidx.test.rule.GrantPermissionRule;
public class InstrumentedTest {
@Rule
public GrantPermissionRule mRuntimePermissionRule = GrantPermissionRule.grant(Manifest.permission.READ_SMS);
...
}
次のように権限を付与できます。
@RunWith(AndroidJUnit4.class)
public class MyInstrumentationTest {
@Rule
public GrantPermissionRule permissionRule = GrantPermissionRule.grant(Manifest.permission.READ_SMS);
...
}