如何解决AndroidJUnit4 :- GrantPermissionRule 无法允许单元测试的运行时权限?
我正在为我的广播接收器类编写 AndroidJUnit4 测试用例,其中有位置和电话状态的运行时权限来执行一些代码。我需要什么,我需要使用 GrantPermissionRule 授予运行时权限。
请检查我现在得到的以下异常
I/TestRunner:开始:testOnReceive(com.xxx.xxxxx.receiver.MyClasstest) I/UiAutomationShellCmd:请求权限:pm grant com.xxxxx.test android.permission.ACCESS_FINE_LOCATION E/GrantPermissionCallable: 权限: android.permission.ACCESS_FINE_LOCATION 不能被授予! E/TestRunner: 失败: testOnReceive(com.xxxx.xxx.receiver.MyClasstest) ----- 开始异常 ----- E/TestRunner: junit.framework.AssertionFailedError: 授予权限失败,详情见 logcat 在 junit.framework.Assert.fail(Assert.java:50) 在 androidx.test.runner.permission.PermissionRequester.requestPermissions(PermissionRequester.java:111) 在 androidx.test.rule.GrantPermissionRule$RequestPermissionStatement.evaluate(GrantPermissionRule.java:128) 在 org.junit.rules.RunRules.evaluate(RunRules.java:20) 在 org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 在 org.junit.runners.BlockJUnit4ClassRunner.runchild(BlockJUnit4ClassRunner.java:78) 在 org.junit.runners.BlockJUnit4ClassRunner.runchild(BlockJUnit4ClassRunner.java:57) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runchildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 androidx.test.ext.junit.runners.AndroidJUnit4.run(AndroidJUnit4.java:154) 在 org.junit.runners.Suite.runchild(Suite.java:128) 在 org.junit.runners.Suite.runchild(Suite.java:27) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runchildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 org.junit.runner.JUnitCore.run(JUnitCore.java:137) 在 org.junit.runner.JUnitCore.run(JUnitCore.java:115) 在 androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56) 在 androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:395) 在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2084) ----- 结束异常 ----- I/TestRunner:完成:testOnReceive(com.xx.xxxxx.receiver.MyClasstest) junit.framework.AssertionFailedError: 无法授予权限,详情请参阅 logcat 在 junit.framework.Assert.fail(Assert.java:50) 在 androidx.test.runner.permission.PermissionRequester.requestPermissions(PermissionRequester.java:111) 在 androidx.test.rule.GrantPermissionRule$RequestPermissionStatement.evaluate(GrantPermissionRule.java:128) 在 org.junit.rules.RunRules.evaluate(RunRules.java:20) 在 org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 在 org.junit.runners.BlockJUnit4ClassRunner.runchild(BlockJUnit4ClassRunner.java:78) 在 org.junit.runners.BlockJUnit4ClassRunner.runchild(BlockJUnit4ClassRunner.java:57) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runchildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 androidx.test.ext.junit.runners.AndroidJUnit4.run(AndroidJUnit4.java:154) 在 org.junit.runners.Suite.runchild(Suite.java:128) 在 org.junit.runners.Suite.runchild(Suite.java:27) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runchildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 org.junit.runner.JUnitCore.run(JUnitCore.java:137) 在 org.junit.runner.JUnitCore.run(JUnitCore.java:115) 在 androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56) 在 androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:395) 在 android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2084)
并请检查我使用下面的 GrantPermissionRule 的代码
import android.content.Context;
import android.content.Intent;
import androidx.test.ext.junit.rules.ActivityScenarioRule;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.GrantPermissionRule;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* MyClass Tester.
*
* @author <Authors name>
* @version 1.0
* @since <pre>Nov 5,2020</pre>
*/
@RunWith(AndroidJUnit4.class)
public class MyClasstest {
private Context context;
private MyClass test;
@Rule public GrantPermissionRule permissionRule = GrantPermissionRule.grant(
android.Manifest.permission.ACCESS_FINE_LOCATION,android.Manifest.permission.READ_PHONE_STATE);
@Before
public void before() throws Exception {
context = InstrumentationRegistry.getInstrumentation().getTargetContext();
test = new MyClass();
System.out.print(getClass().getSimpleName() + " test start");
}
@After
public void after() throws Exception {
System.out.print(getClass().getSimpleName() + " test end");
}
/**
* Method: onReceive(Context context,Intent intent)
*/
@Test
public void testOnReceive() throws Exception {
//Todo: Test goes here...
if (SdkAppHelper.getInstance(context).isPermissionsAllowed()) {
test.onReceive(context,new Intent().setAction(SdkAppConstants.ACTION_START_1));
test.onReceive(context,new Intent().setAction(SdkAppConstants.ACTION_UPLOAD_11111_DATA_MANUALLY));
test.onReceive(context,new Intent().setAction(SdkAppConstants.ACTION_INITIALIZE_DEVICE_ID));
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。