如何用android中的实际HttpURLConnection进行单元测试?

时间:2016-04-04 12:16:22

标签: java android unit-testing httpsurlconnection

我正在编写单元测试/集成测试,调用使用HttpsURLConnection对象的类库。很多时候,通过单元测试调用连接对象上的方法,例如addRequestPropertysetDoOutputsetRequestMethod,我得到像java.lang.IllegalStateException: Already connected这样的异常。该行为很可能是由于在gradle中跟随,因为返回了默认值。

testOptions {
    unitTests.returnDefaultValues = true
}

有关详细信息,请参阅http://tools.android.com/tech-docs/unit-testing-support

相同的代码在App中运行良好。有没有办法在测试时实际使用真正的HttpsURLConnection对象?

2 个答案:

答案 0 :(得分:1)

您可以使用库来模拟请求和响应。我推荐这个:MockWebServer

修改: 重新阅读您的问题后,您似乎希望在单元测试中使用HttpsURLConnection。在单元测试中尝试使用Android SDK中的类的问题意味着您的测试成为一个测试测试,这意味着它必须在设备/模拟器上运行。

如果您想要集成检测测试的示例,请查看this很好的示例。

由于HttpsURLConnection也在Java JDK包中,如果您使用该类(导入javax.net.ssl),您可能会更改不使用任何Android类,因此您可以将测试作为本地单元测试运行JVM(不是设备/模拟器)。

如果您想更好地了解检测和本地单元测试之间的区别,请阅读this博客文章。

答案 1 :(得分:0)

由于HttpsURLConnection是android的一部分,因此测试的一种方法是使用http://developer.android.com/training/testing/start/index.html中描述的Android Instrumented Tests。这将启动AVD或真实设备并在那里运行测试。

确保在AndroidManifest.xml中设置权限

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