2016-10-15 84 views
1

我想爲我的Codename One應用程序編寫功能測試。如何在Codename One中模擬服務器/ http請求進行測試?

要做到這一點,我需要能夠嘲笑一些服務器的響應,以便它們返回到我需要的特定測試。

有一件事我試圖讓發送HTTP請求的函數將ConnectionRequest作爲參數,這樣我可以注入一些東西來模擬網絡延遲,然後用模擬響應調用回調。

但是,當我嘗試在單元測試的prepare方法中注入ConnectionRequest的模擬時,它們仍然在應用程序啓動後注入,這對我的情況不起作用,因爲我在開始時發送了HTTP請求的應用程序。

是否有可能在啓動應用程序之前模擬ConnectionRequest或做相同的事情?

+0

我們在Codename One中沒有類似的東西。儘管如此,你也許可以破解一些JavaSE模擬框架來與模擬器一起工作。 –

回答

0

這是我最終做的。如果有人需要自動化測試的解決方法,我將發佈此信息。

  1. 寫稱爲HTTPRequestInterface一個接口,它暴露了neccessary方法來構造一個HTTP查詢
  2. 創建一個名爲的HTTPRequestInterface實現說HTTPRequest,這僅僅是圍繞ConnectionRequest包裝
  3. 創建HTTPRequests的創建一個類,比如HTTPRequestFactory,它有一個叫做create的靜態方法和一個叫做setMock的方法。如果沒有設置模擬,並且在設置了模擬的情況下指定的模擬,則該類創建正常的HTTPRequest
  4. 替換所有ConnectionRequestHTTPRequestFactory.create()
  5. 創建一個類InitialSetup,它有兩個方法:setInitialization,它接受一個Runnable來執行,init方法,剛剛運行Runnable
  6. 在啓動方法中,調用InitialSetup.init
  7. 現在在測試中,在prepare方法中,我可以設置所需的模擬,而不運行自動化測試的應用程序將查詢發送到實際的服務器。

需要一些努力,但自動測試與嘲笑後端帶來的信心,我認爲是絕對值得的!

1

您可以將嘲笑的設備慢速連接或關閉它完全模擬沒有互聯網連接模擬器減慢連接。在您的模擬器中找到模擬 - >網絡中的選項。將此設置更改爲Slow connectionDisconnected,然後重新運行您的應用。

指向一個錯誤的URL來模擬404錯誤。

從服務器端代碼返回不可讀的數據來模擬IOException或NullPointer異常。

在執行此操作時,請確保您的網絡監視器可見。你想要的大多數其他響應可以在你的服務器端完成。

+0

感謝您的回答!但在這種情況下,我想要的是,服務器端點可能返回兩個可能的響應,我想測試該應用程序是否適合每個響應。由於功能測試是自動化的,我無法在服務器中硬編碼響應。我在Angular中尋找類似https://docs.angularjs.org/api/ngMock/service/$httpBackend 的東西,基本上你會告訴:「對於這個自動化測試,期待這個HTTP請求,並用這個HTTP響應做出響應」 。經過一番調查,我認爲這在代號1中是不可能的。 –

相關問題