问题描述
我正在为我的广播接收器类编写 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 (将#修改为@)