jwi*_*ir3 26 junit android unit-testing
我正在尝试使用以下目录结构(由Android Studio设置)进行测试:
我可以运行一些测试就好了,甚至AllTests.java
运行也没有AndroidManifest.xml
文件甚至在那里.问题是,对于我的一项新测试,我需要获得android.permission.INTERNET
许可.所以,我将以下内容添加到目录中的AndroidManifest.xml
文件中androidTest
:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.core"
android:versionCode="2"
android:versionName="2.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.当我运行我的一个测试时,我仍然收到以下错误:
E/RestAPIRequestTest:权限被拒绝(缺少INTERNET权限?)
我已经尝试设置package
为com.example.core.test
我的AndroidManifest.xml
文件(因为这是它显示在我的设置- >应用程序列表),但没有喜悦.
我认为它甚至不能识别AndroidManifest.xml
文件,因为版本号也没有显示在测试应用程序的设置中.
如何为我的测试项目注入正确的权限?
use*_*293 26
我需要做类似的事情.我在androidTest旁边创建了一个名为"debug"的文件夹,它对应于应用程序的调试变体,并在该文件夹中放置了具有权限的AndroidManifest.xml.然后,由于测试应用程序使用调试变体,因此权限正在测试中.它并不理想,因为它模糊了测试和调试之间的界限,这些并不完全相同.
我认为正在发生的事情是androidTest/AndroidManifest.xml中的权限将转到测试应用程序,而不是目标应用程序,尽管如果实际上有两个不同的APK或什么,它不是100%清楚.
Pau*_*ulR 13
在早期版本的Android Studio和Android Gradle插件中,androidTest/AndroidManifest.xml文件被忽略.这在当时的tools.android.com网站上有记录.
随着Android Studio 1.0+和Android Gradle 1.0+插件于2014年12月推出,AndroidManifest.xml文件现在应该与普通的main/AndroidManifest.xml文件合并(除了调试和发布清单文件(如果存在)).关于清单合并规则的更多细节在这里.
如果您仍遇到问题或只是调试清单相关的测试问题,请尝试此操作(稍微适应Windows):
cd MyApplication
./gradlew assembleDebugTest
ls app/build/intermediates/manifests/test/debug/AndroidManifest.xml
ls app/build/intermediates/manifests/full/debug/AndroidManifest.xml
ls app/build/outputs/apk/manifest-merger-debug-report.txt
一些额外的说明:
这是一个已知问题。
目前(AGP <= 3.4.X)不支持AndroidManifest
测试合并。
此处报告: https: //issuetracker.google.com/issues/127986458 ,这里是由 Roboelectric 维护人员之一创建的问题。
此处描述的解决方法与user3286293提出的解决方法几乎相同,并且目前是出于测试目的合并清单的唯一方法。
希望看到 AGP 3.5 或 3.6 的修复
您需要在 build.gradle 文件中定义它:
android {
sourceSets {
androidTest.manifest.srcFile "src/androidTest/AndroidManifest.xml"
}
}
Run Code Online (Sandbox Code Playgroud)
如此处所述,在插桩测试期间,会生成两个 .apk 文件。如果你看看,较小的一个是最有可能的一个命名app-debug-androidTest-unaligned.apk
,它实际上并不包括所提供的权限。
检查文件aapt d permissions <apk_file_path>.apk
有助于查看所有文件的列表。
现在,请求权限的上下文本身可能存在问题。我有一个类似的问题,试图在 SD 卡上写一些截图(因此需要WRITE_EXTERNAL_STORAGE
许可)。
这个答案帮助我解决了这个问题,虽然我不能完全理解为什么它是必要的。
简而言之,您需要android:sharedUserId
在两个清单中声明相同的内容,以便在两个 apk 安装在同一设备上时合并权限 - 这发生在测试运行时。这帮助我将测试所需的权限与生产中的权限分开。
归档时间: |
|
查看次数: |
12848 次 |
最近记录: |