【问题标题】:Internet access in Instrumented Test仪表测试中的 Internet 访问
【发布时间】: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


【解决方案1】:

您的清单中可能缺少此内容

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

【讨论】:

  • 测试的清单在哪里?
  • 此回复可以帮助您为测试创建清单(如果您还没有清单)stackoverflow.com/a/27884436/11611305
  • 有效!请扩大答案,说明将清单放在哪里进行测试;事实上,我不知道有可能有一个 Manifest 用于测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 2019-06-05
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多