2013-06-26 24 views
2

是否可以在Java集成測試中模擬緩慢的HTTP連接,以便我可以定義服務器在確認連接之前應等待多長時間?一個也支持JAX-WS web服務的解決方案將是完美的。模擬用於Java集成測試的慢HTTP連接?

背景: 我必須集成測試中心超時配置。配置器本身必須是技術獨立的。起初它支持JAX-WS webservices,因此將在請求上下文中設置com.sun.xml.ws.connect.timeout屬性。

(我會盡力說服他們,這是JAX-WS的一部分,因此我們並不需要對其進行測試,但這個問題是我的備份計劃。)

PS:有其他問題一般會模擬一個緩慢的連接。這是不同的,因爲我不能在單元測試中使用外部工具,我必須能夠定義特定的連接時間。

+0

我會推薦使用EasyMock。這並不像名稱所暗示的那麼容易,但它確實使得諸如http連接和數據庫的測試變得更加容易。 – JREN

+0

@JREN:我知道EasyMock,但是我怎樣才能模擬一個慢速連接呢?連接是由JAX-WS創建的,所以很難注入模擬,不是嗎? –

+0

我們通常在我們的類中創建一個名爲currentMillis的受保護方法,該方法返回System.currentTimeMillis(),以便我們可以覆蓋它以在我們的測試類中返回一個字段變量,以通過簡單地增加時間來模擬無論多長的時間跳過到變量。 – JREN

回答

1

在我的一個單元測試中,我使用了一個純Java的NanoHTTPd https://github.com/NanoHttpd/nanohttpd。它只有一個班級。

+0

太棒了!我只需修改NanoHTTPD#start(),以便它調用創建ServerSocket的自定義方法,然後在調用ServerSocket#accept()的超級實現之前,將ServerSocket#accept()休眠一段給定時間。 –

0

你可以通過代理(http或襪子),它可以嵌入到你的應用程序中。然後您可以告訴代理提供您需要測試的行爲。

我不得不測試一個丟棄的TCP/IP連接(How to reproduce a silently dropped TCP/IP connection?),最後經過了一個用Java編寫的SOCKS代理,我剛剛暫停了它來模擬我正在尋找的行爲。

+0

是的,代理服務器可以,但我該如何實現它?我只熟悉servlet編程,而servlet本身不處理連接。 –

+0

我建議在此時引入一位高級開發人員。 –

+2

「我建議在此時引進一名高級開發人員。」可以添加到SO上的每一個問題。這不是很有幫助。 –