2016-12-17 74 views
1

eclipse片段最常見的用途之一是作爲JUnit測試類的容器。但是當它扮演另一個更重要的角色時,如何爲Eclipse片段編寫JUnit測試?例如,它具有平臺特定的代碼。什麼是正確的方式來創建Eclipse片段的JUnit測試?

問題是無法爲片段創建片段。而且你不能爲主機插件編寫測試來測試片段,因爲它甚至不能編譯,因爲只有在運行時纔將片段「合併」到主機中。

回答

1

我不知道一個令人滿意的解決方案,但是,您可能需要考慮這些解決方法。

Eclipse的ExtensibleAPI

可以使用Eclipse-ExtensibleAPI清單頭這樣

Eclipse-ExtensibleAPI: true 

這導致由片段導出的包由主機包被重新出口。現在您可以創建一個測試包來導入所需的包,因此可以訪問片段中的公共類型。

這不像測試片段那樣接近測試片段,您可以從測試和生產代碼中使用相同的類加載器獲得包私有類型和方法。但你至少可以通過公開的手段進行測試。

但是,請注意,此標頭是Eclipse擴展,不屬於OSGi規範的一部分。因此你被綁定到Eclipse的OSGi實現Equinox。此外,片段的包將通過主機包導出,不僅可以看到測試包,而且可以看到所有包。

Java庫

如果您的片段有幾個依存關係,並不需要你可以考慮把它當作一個普通的Java庫w.r.t測試的OSGi/Eclipse運行。另一個同級Java項目可能包含測試,並且對片段項目具有項目依賴項(屬性> Java構建路徑>項目)。同樣,訪問包私有成員將無法工作。

如果您使用像Maven/Tycho這樣的構建工具,則需要額外的工作來聲明依賴關係並在構建過程中執行這些測試。

Bndtools

你也可以考慮Bndtools,看看這個開發工具適合您的需求比Eclipse Plug-in Development Environment (PDE)更好。

普通JUnit測試保存在與生產代碼相同的項目中的獨立源文件夾中。這將使您的測試代碼訪問生產代碼,就像使用測試片段一樣。

Bndtools也支持執行集成測試,但我懷疑你可以訪問片段代碼而不是通過片段提供的服務或其他API。

對於CI構建,Bndtools項目通常在各自的bndhttp://bnd.bndtools.org/)插件的幫助下使用Maven或Gradle。就像Maven/Tycho被用來構建和打包PDE項目一樣。

由於Bndtools是用於開發OSGi包的IDE擴展,因此它不知道有關Eclipse插件的特定性,例如plugin.xml中聲明的擴展。因此,這些工件沒有編譯器和編輯器。但是,如果幸運的話,您甚至可以使用PDE構建器爲無效擴展和擴展點顯示錯誤標記。

在同一個項目中有生產和測試代碼的另一個缺點是在開發時,生產代碼也可以看到像JUnit,模擬庫等純測試依賴項。

當然,生成的(片段)包不包含測試代碼和測試依賴關係。

但是,Bndtools本身是用Bndtools開發的。所以有證據表明Bndtools可以用來編寫Eclipse插件。

+0

我試圖避免第二個選項,我知道。但是,我會使用這個,因爲目前我沒有訪問主機插件來修改它的頭。 Eclipse-ExtensibleAPI是一件了不起的事情。不知道。謝謝!有機會的時候肯定會遷移到它。 – bdshadow

+0

另一個可能的解決方案出現在我腦海裏:Bndtools,請參閱編輯的答案。儘管在你的情況下它可能太牽強了,但爲了完整起見,我還是想加上它。 –

相關問題