我正在编写单元测试/集成测试,调用使用HttpsURLConnection
对象的类库。很多时候,通过单元测试调用连接对象上的方法,例如addRequestProperty
,setDoOutput
,setRequestMethod
,我得到像java.lang.IllegalStateException: Already connected
这样的异常。该行为很可能是由于在gradle中跟随,因为返回了默认值。
testOptions {
unitTests.returnDefaultValues = true
}
有关详细信息,请参阅http://tools.android.com/tech-docs/unit-testing-support
相同的代码在App中运行良好。有没有办法在测试时实际使用真正的HttpsURLConnection对象?
答案 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"/>