gpt4 book ai didi

AndroidTestCase - assertActivityRequiresPermission 和 assertReadingContentUriRequiresPermission

转载 作者:行者123 更新时间:2023-11-29 02:09:53 24 4
gpt4 key购买 nike

希望在方法 assertActivityRequiresPermission 和 assertReadingContentUriRequiresPermission 方面得到一些帮助。它的行为方式与我想象的不一样,我也看不出哪里出了问题。

我的理解是,可以通过在 AndroidManifest.xml 中将 android:permission 添加到它们各自的标签(和)来保护 Activity 和提供者。为了声明客户端 Activity 具有启动和 Activity 所需的权限或与提供者合作,我们在我认为是“包”级别的标记下声明。

因此,为了测试 AndroidTestCase 中的断言方法如何工作,我设置了一个 HelloWorld 项目和一个用于测试 HelloWorld 的项目。这是 HelloWorld 的 list 。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.helloandroid"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />

<uses-permission android:name="android.permission.RECEIVE_SMS" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".HelloAndroidActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name=".RecipientActivity"
android:label="@string/app_name"
android:permission="android.permission.RECEIVE_SMS" >
</activity>
</application>
</manifest>

我有受 RECEIVE_SMS 保护的 RecipientActivity,所以我声明使用 RECEIVE_SMS,以便 HelloAndroidActivity 能够启动 RecipientActivity。

现在在我的测试课上,

public class TestRecipientActivity extends AndroidTestCase {

public void testPermissions() {
String packageName = "com.example.helloandroid";
String className = packageName + ".RecipientActivity";
String permission = android.Manifest.permission.RECEIVE_SMS;
assertActivityRequiresPermission(packageName, className, permission);
}

public void testContactsPermissions() {
final Uri URI = ContactsContract.AUTHORITY_URI;
final String permission = android.Manifest.permission.READ_CONTACTS;
assertReadingContentUriRequiresPermission(URI, permission);
}
}

结果?

testPermissions() 失败并显示“AssertionFailError:预期的安全异常”,这意味着 RecipientActivity 已成功启动且未抛出任何 SecurityException。

testContactsPermissions() 通过而没有抛出任何异常,尽管我没有在任何地方定义。

谁能解释为什么我会得到上述结果?谢谢!

最佳答案

你很久以前就问过这个问题,不知道你现在有没有解决。

我正在学习 Android 中的单元测试,我遇到了同样的问题。一开始我以为方法 assertActivityRequiresPermission() 测试在 中声明的权限,但后来我意识到这个方法只测试是否有与作为参数传递的 Activity 关联的特定权限。

您正在将相同的权限关联到 标签。关键是,如果您从 中删除权限,则断言有效。我认为问题在于此断言预期会引发 SecurityException,因为它无法在未经许可的情况下启动 Activity ,但您在 manifest.xml 中使用了该许可,因此不会引发异常。

关于AndroidTestCase - assertActivityRequiresPermission 和 assertReadingContentUriRequiresPermission,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8089756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com