- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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)
我已经为 Activities 的安全权限编写了一个测试,但是它并没有达到我的预期。
我在 list 中声明我的 Activity 需要许可。我运行断言此权限的测试。
这是一个应该通过但没有通过的示例测试:
安卓 list :
<?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");
}
}
stub Activity :
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" />
最佳答案
测试应用和被测应用运行在同一个进程中。因此测试用例通过了,因为测试应用程序不需要请求启动 Activity 的权限。
要测试权限,测试应用程序应该在不同的进程中运行。这可以通过将测试包名称分配给 android:targetPackage 来完成在测试应用程序 list 的 instrumentation
元素中。
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.blundell.myapplication.test"
xmlns:android="http://schemas.android.com/apk/res/android">
<application android:debuggable="true">
<uses-library android:name="android.test.runner" />
</application>
<instrumentation android:label="Tests for com.blundell.myapplication.test" android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.blundell.myapplication.test" android:handleProfiling="false" android:functionalTest="false" />
</manifest>
这是 manifest旧 android 包 com.android.globalsearch
的文件,以相同的方式使用它。这是该 list 文件中留下的评论:
We are self instrumenting so the test can be run, but since this is for permissions test, we are not instrumenting any app (we want to be accessing it from the outside).
注意:如果您使用的是gradle,则需要手动生成测试包,安装并测试。原因来自docs :
The value of the targetPackage attribute of the instrumentation node in the test application manifest is automatically filled with the package name of the tested app, even if it is customized through the defaultConfig and/or the Build Type objects. This is one of the reason the manifest is generated automatically.
我按照这些步骤手动构建和执行测试包。
./gradlew assembleDebugTest
adb install -r ./app/build/outputs/apk/app-debug-test-unaligned.apk
adb shell am instrument -w com.blundell.myapplication.test/android.test.InstrumentationTestRunner
这是 logcat 输出:
10-28 21:06:46.749 32649 32662 I TestRunner: started: testActivityPermission(com.blundell.myapplication.ApplicationTest)
10-28 21:06:46.754 983 993 I ActivityManager: START u0 {flg=0x10000000 cmp=com.blundell.myapplication/.SecondActivity} from pid 32649
10-28 21:06:46.754 983 993 W ActivityManager: Permission Denial: starting Intent { flg=0x10000000 cmp=com.blundell.myapplication/.SecondActivity } from ProcessRecord{427f4f78 32649:com.blundell.myapplication.test/u0a10111} (pid=32649, uid=10111) requires perm.foo.bar
10-28 21:06:46.755 32649 32662 I TestRunner: finished: testActivityPermission(com.blundell.myapplication.ApplicationTest)
10-28 21:06:46.755 32649 32662 I TestRunner: passed: testActivityPermission(com.blundell.myapplication.ApplicationTest)
关于AndroidTestCase assertActivityRequiresPermission() 断言不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26549915/
https://gist.github.com/blundell/ff2ac1d5ff0a41519c36 http://developer.android.com/reference/android
我已经实现了一个 Instrumentation 和一个 AndroidTestCase。 对于我的测试,我需要连接到外部 WIFI 设备。我希望测试人员能够指定一个 SSID 供测试使用。 给命令行
我打算开始编写一些 android 测试用例,我想知道是否有一种方法可以在模拟器中以编程方式打开和关闭连接。 // High level puesdo code Test: is Message Pu
希望在方法 assertActivityRequiresPermission 和 assertReadingContentUriRequiresPermission 方面得到一些帮助。它的行为方式与我
我找到了 MeediaMuxer 的演示,它是一个 AndroidTestCase 文件。这是 link . 我从未使用过 Android Test。我做了一些研究,但其中大部分都有些复杂......
我正在使用 ActivityInstrumentationTestCase2 在我的 GUI 上进行自动黑盒测试。有没有办法点击一个对话框,或者在单元测试中获取属于该对话框的 View ? 我能想出的
我正在编写一个 android 测试用例,它需要对被测试的 Activity 执行一个单独的 Activity(不是为了测试,而是为了获得对 contentresolver 的访问权限,以便我可以更改
我一直在看这个答案:https://stackoverflow.com/a/2055455/281460它很好地解释了可用于 Android 单元/集成测试的不同测试类。不过,它没有解释的一件事是 I
我正在编写一些测试来测试我的 sqllite 数据库代码。这里有人可以解释一下,使用我从 AndroidTestCase.getContext() 获得的上下文来编写这些测试是否会有所不同?或使用 I
我正在使用 AndroidTestCase 进行一些单元测试,并且想知道是否可以使用我为 junit4 读过的忽略注释?仅仅使用注解就会报错,也许有什么特别需要注意的地方? 提前谢谢,马库斯 最佳答案
在为 Android 库项目编写测试用例时,我遇到了一些 View 尺寸问题。具体来说,我正在使用 AndroidTestCase 来测试自定义 View 类,该类(除其他外)可以生成其内容的位图。创
在我的项目中,当Service启动时,我发送一个广播: Intent intent = new Intent("my.service.action"); intent.setPackage("com.
我正在尝试在 Android 测试中测试写入 Parcel,但它不起作用。 s==空!怎么了? public class scraptest extends AndroidTestCase {
我正在为我的 Android 项目编写一个非常简单的单元测试用例,测试用例简单地执行一个在后台进行网络操作的 AsyncTask。我正在为我的测试用例扩展 AndroidTestCase 类: pub
我正在尝试使用 AndroidTestCase 进行测试。我试图在我的应用程序中只测试一个特定的类,但是这个类不扩展 Activity、Service 或其他任何东西。除了需要上下文之外,它基本上是一
我有一个测试用例,并在那里使用Environment.getExternalStorageDirectory() 调用,它返回 null。 我在应用程序的 list 中拥有“写入外部存储”权限(并且
我正在尝试执行一个扩展我制作的 AndroidTestCase 的测试类,但显然我一直收到以下错误: No apk changes detected. Skipping file upload, fo
你好,我正在为我的 sqlite 数据库做测试部分。我以前使用过 JUnit,但我了解到我必须扩展 AndroidTestCase 才能获得模拟上下文。但是,当我 try catch 异常时(如在 J
我正在尝试接受 Android Studio 的新单元测试功能。我已按照 http://tools.android.com/tech-docs/unit-testing-support 上的说明进行操
我有自己的 SQLiteOpenHelper 如下: public class MyOpenHelper extends SQLiteOpenHelper { public static fina
我是一名优秀的程序员,十分优秀!