2011-07-04 105 views
1

我正在測試一個小型的代理服務器程序,我的問題是測試啓動代理到某個端口。每次我都可以使用不同的端口,並且我有兩臺服務器在同一端口上偵聽。我如何讓jUnit(在Eclipse中)一個接一個地運行測試,而不是同時運行?jUnit - 是否可以不同時運行測試?

回答

1

JUnit一次只能運行一個測試,除非您做了一些特殊的事情,否則它會做。您的情況可能發生的情況是,在第二次測試運行之前,爲一次測試啓動的代理不會停止,或者不會及時停止。

編輯:作爲對您的評論的迴應,有幾種方法可以解決這個問題。一種是將測試與類相同的包中,以便您可以使用包私有方法(這意味着它沒有public private或其他任何的聲明),關閉套接字並從測試中調用該方法,所以它已關閉,但它不是公共API的一部分。

另一種選擇是在構造函數中傳入套接字生成器。在生產中,你可能不會傳遞一個,而只是有一個內部實現,但是在測試中你傳遞一個由你的測試代碼創建的實現,並且測試代碼在測試結束時關閉它。

+0

有趣。任何方式來強制關閉過程?這是一項家庭作業,我們應該實現的API沒有關閉。 –

1

我以前見過這種類型的套接字問題。在不同的操作系統關閉一個端口可能需要更多的時間比虛擬機說。我會建議你讓測試進入休眠狀態和/或超時,直到他們可以打開服務器端口。我知道這是一個蹩腳的解決方案。

+3

您也可以嘗試在綁定之前在ServerSocket上設置[SO_REUSEADDR](http://download.oracle.com/javase/6/docs/api/java/net/ServerSocket.html#setReuseAddress%28boolean%29)選項,這使得它可以跳過這個閉幕期。這是非常危險的;我不會在真正的運行系統中執行此操作,但它對於測試應該沒問題。 –

相關問題