【发布时间】:2020-10-01 16:09:08
【问题描述】:
我正在尝试访问我们在 Android Instrumented Test 中的一台服务器。 我在装有 Android 10 的设备上运行测试并获得以下异常:
Permission denied (missing INTERNET permission?)
为了避免这种情况我已经尝试过(我正在使用 kotlin)
@Rule
@JvmField
var runtimePermission = GrantPermissionRule.grant(Manifest.permission.INTERNET)
但在这种情况下,我遇到了这个错误:
junit.framework.AssertionFailedError: Failed to grant permissions
连下面的代码都没有成功:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
getInstrumentation().getUiAutomation().executeShellCommand(
"pm grant " + context.getPackageName()
+ " android.permission.INTERNET");
}
是否有可能实现我的目标?
[更新] 这是一个最小的测试:
class Minimal {
@Rule
@JvmField
var runtimePermission: GrantPermissionRule = GrantPermissionRule.grant(Manifest.permission.INTERNET)
@Test
fun minimalReproducible() {
val buffer = CharArray(2000)
val url = URL("https://example.net/new-message.php")
val connection = url.openConnection() as HttpsURLConnection
connection.requestMethod = "POST"
val urlParameters: String = "" // buildParameterUrlString(params)
connection.doOutput = true
val outputStream = DataOutputStream(connection.outputStream)
outputStream.writeBytes(urlParameters)
outputStream.flush()
outputStream.close()
val responseCode = connection.responseCode
}
}
【问题讨论】:
-
很难理解您当前的代码 sn-ps 是如何组合在一起的,或者它们甚至与测试有什么关系。请提供正确的minimal reproducible example。
-
@Code-Apprentice 更新了一个最小的示例测试,谢谢。
标签: android android-permissions android-espresso