问题描述
我正在尝试通过Android Instrumented测试访问我们的其中一台服务器。 我在装有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
}
}
解决方法
您的清单上可能会丢失
<uses-permission android:name="android.permission.INTERNET" />