2011-04-26 47 views
2

我們有一個爲較老的Java VM(特別是1.3 ME)編寫並運行的庫。使用在較新VM下運行的測試工具測試針對較舊Java VM的代碼

它會產生不準確的結果,使用'現代'測試工具,運行在1.6 VM下測試庫的功能?從庫到VM之間不同(例如IO)類

呼叫被抽象的,所以測試工具可以提供自己支撐實現。從理論上講,我們可以獨立於它所運行的平臺來測試應用程序邏輯。

這個模型是否存在特定的區域,或者不同的虛擬機可能導致測試結果錯誤?顯然,在測試庫時能夠使用類似泛型和現代測試工具的東西具有巨大優勢,但如果測試無效,這些將被否定。

要解釋這樣做的原因:我們正在編寫的代碼與特定的虛擬機(例如,Blackberry和Android手機。)設備的工作原理,所以我們開發和代碼的公共API在可能的情況。我們可以編寫一個合理的Java共享子集,但是當涉及到測試時,在我們可以訪問虛擬機的桌面上運行業務邏輯,這些虛擬機提供了更好的測試工具(例如EasyMock等框架)。

回答

0

我不認爲我會建議在遠不同的環境中進行測試。不過,這裏有一個替代解決方案。使用Java 1.6編寫測試工具並使用Retroweaver使其與1.3兼容。然後在1.3上運行測試環境,就像在現實世界中使用它一樣。你將能夠使用泛型和現代化的圖書館。但是,您將無法使用Java運行時超過1.3版的功能。這可能是一個合理的妥協方案,允許測試相同的環境,因爲圖書館將被用於。

+0

這是一個很好的建議,值得調查。很難爲這個問題指定一個「正確的」答案,但是這肯定會解決這個問題。 – AndyT 2011-04-27 10:08:40

0

可能。

我假設編譯時庫是1.3 JVM(不只是類的版本目標)。否則,你可能會遇到方法/類/字段未找到的錯誤等。

如果某些代碼已寫入實現而不是抽象,則可能會出現錯誤。也就是說,開發人員依靠觀察到的行爲(「我試過並且它工作了」)而不是1.3文檔中記錄的內容。

較舊的運行時可能會顯示不存在於較新的錯誤中的錯誤。可能有解決方法,但是在新的運行時中將不會檢測到問題。

0

我認爲(在技術上)單元測試Java類的應用程序邏輯會被罰款上較新的VM,正如你說的,語言的好處將使它更容易些。

雖然我不得不說我認爲編寫已經編譯好的類的測試有點奇怪。假設你發現錯誤,你將不得不在1.3上修復它們,這可能會讓開發人員不斷地從1.6版的JUnit測試和1.3版的代碼中交換出來。

這聽起來像你真正想要在這種情況下,做一些集成測試,證明了老班會仍然在他們的舊的VM上運行。如果是我,我會爲了簡單而保留所有內容 - 但這取決於測試類的目的。如果有一天你打算遷移到1.6,那麼從長遠來看,新型測試會更好。

對不起!最終沒有多少結論性的答案! :)