【发布时间】:2014-10-24 14:26:04
【问题描述】:
https://gist.github.com/blundell/ff2ac1d5ff0a41519c36 http://developer.android.com/reference/android/test/AndroidTestCase.html#assertActivityRequiresPermission(java.lang.String, java.lang.String, java.lang.String)
我已经为活动的安全权限编写了一个测试,但是它没有达到我的预期。
我在清单中声明我的活动需要许可。 我运行断言此权限的测试。
这是一个应该通过但没有通过的示例测试:
AndroidManifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.blundell.myapplication">
<application>
<activity
android:name=".SecondActivity"
android:permission="perm.foo.bar" />
</application>
</manifest>
我的测试用例:
package com.blundell.myapplication;
import android.app.Application;
import android.test.ApplicationTestCase;
/**
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
*/
public class ApplicationTest extends ApplicationTestCase<Application> {
private static final String PACKAGE = "com.blundell.myapplication";
public ApplicationTest() {
super(Application.class);
}
public void testSecondActivityRequiresFooBarPermission() throws Exception {
assertActivityRequiresPermission(PACKAGE, PACKAGE + ".SecondActivity", "perm.foo.bar");
}
}
存根活动:
package com.blundell.myapplication;
import android.app.Activity;
public class SecondActivity extends Activity {
}
测试失败时的堆栈跟踪:
junit.framework.AssertionFailedError: expected security exception for perm.foo.bar
at android.test.AndroidTestCase.assertActivityRequiresPermission(AndroidTestCase.java:99)
at com.blundell.myapplication.ApplicationTest.testSecondActivityRequiresFooBarPermission(ApplicationTest.java:15)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)
编辑:
我发现使用 gradle 无论如何您都可以将 AndroidManifest 添加到您的测试中,并且它将被合并: @Manish Mulimani 我添加了仪器标签,但这并没有使测试通过。 (添加一个 IntentFilter 就可以了)。
即
在/src/androidTest/AndroidManifext.xml:
<instrumentation
android:label="new label to prove tools:replace works"
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.blundell.myapplication.test"
tools:replace="targetPackage, label" />
【问题讨论】:
-
在使用权限之前,您是否尝试过在清单文件中添加permission 元素?
-
是的,没有区别 :-(
-
我已经更新了我的答案。
标签: android testing assertions android-permissions