2016-04-04 50 views
0

我正在編寫調用使用HttpsURLConnection對象的類庫的單元測試/集成測試。多次在通過單元測試調用連接對象上的方法時,如addRequestProperty,setDoOutput,setRequestMethod,我收到了例外情況,如java.lang.IllegalStateException: Already connected。行爲很可能是由於隨着默認值的返回而在Gradle中產生。如何在Android中使用實際的HttpURLConnection進行單元測試?

testOptions { 
    unitTests.returnDefaultValues = true 
} 

更多細節

相同的代碼工作正常,在應用中看到http://tools.android.com/tech-docs/unit-testing-support。有沒有辦法在測試時真正使用真正的HttpsURLConnection對象?

+0

看起來我必須按照http://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html所述編寫測試用例,因爲HttpsURLConnection是android的一部分。 – resp78

回答

0

由於HttpsURLConnection是Android的一部分,因此一種測試方法是使用Android Instrumented Tests,如http://developer.android.com/training/testing/start/index.html所述。這會啓動AVD或真實設備並在那裏運行測試。

確保您設置的權限在AndroidManifest.xml

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

1

您可以使用庫來嘲笑請求和響應。我推薦這個:MockWebServer

編輯: 重新閱讀你的問題後,它看起來像你想在你的單元測試中使用HttpsURLConnection。在單元測試中嘗試使用Android SDK中的類的問題意味着您的測試成爲儀器測試,這意味着它必須在設備/仿真器上運行。

如果你想要一個集成儀器測試的例子,看看this一個很好的例子。

由於HttpsURLConnection也位於Java JDK包中,所以如果使用該類(import javax.net.ssl),則可能會更改不使用任何Android類,因此您可以將測試作爲本地單元測試運行你的JVM(不是設備/仿真器)。

如果您想更好地瞭解儀器和本地單元測試之間的差異,請閱讀this博客文章。

+0

這個想法是對真實服務器進行集成測試。 – resp78

相關問題