我們已經在多個項目中使用了測試片段多年,現在發現它是最實用的方法。
由於片段與主機包共享相同的類加載器,因此您的測試可以訪問內部包和包私有方法,就像沒有OSGi容器一樣。
片段甚至可以包含fragment.xml
,您可以在其中爲測試添加擴展名(如果有必要)。
測試驅動插件開發中最令人討厭的部分是PDE測試本身。只要您的代碼在測試中需要工作臺運行,測試執行速度就會急劇下降。 PDE測試啓動Eclipse工作臺以在其中執行測試。
因此,我們盡力將我們的代碼從工作臺代碼中分離出來。這允許我們儘可能編寫「快速」簡單的JUnit測試,只有在絕對必要時才使用PDE測試。這兩項測試都可能駐留在同一個片段中,並通過人工模式進行區分。
需要通過目標平臺(以及其他非測試依賴項)提供測試依賴關係(JUnit,模擬庫,匹配器庫等)。雖然混合這些依賴關係似乎很奇怪,但我們在實踐中沒有任何問題。
MoreUnit非常適合這種設置。可以配置(每個項目)在特定源文件夾中查找測試/生產代碼類,即使這些文件夾駐留在不同的項目中。
Infinitest可能不太適合執行PDE測試,只是因爲它們的執行速度很慢,而Infinitests則是要頻繁地執行快速測試。但是,如果可以排除PDE測試,您仍然可以將其用於普通的JUnit測試。
對於示例,Eclipse Extras項目應用了描述的技術 - 如果您有興趣,您可以探索源代碼以瞭解它們在實踐中的工作原理。
如果您從頭開始,Bndtools當然值得考慮。我聽說Bndtools開發人員使用Bndtools來構建Bndtools。 AFAIK Bndtools沒有編輯支持插件的文物,如plugin.xml
。但也許你可以使用PDE插件編輯器和Bndtools編輯擴展點和擴展點。
在典型的Bndtools項目中,您的生產代碼和測試代碼位於同一項目的不同源文件夾中,非常像Maven項目。 但是,test
源文件夾不包含在生成的包中。
在同一個項目中有生產和測試代碼的缺點是測試依賴關係在生產代碼中是可見的。這是因爲兩個源文件夾共享相同的類路徑容器。
Tycho儘管它的孵化器狀態是一個很好的工具來測試和構建各種Eclipse工件,如插件,功能,目標平臺和產品。結合上述設置,我們在CI服務器上使用Tycho構建,運行測試 並最終爲我們的插件項目打包p2存儲庫。
有關該主題的更多資源:
作爲牽頭開發者,我可以證實,我們確實使用Bndtools發展Bndtools和它的作品。我們不得不手動編輯'plugin.xml'。用於plugin.xml的PDE編輯器在非PDE項目中使用時引發NPE :-( –
我剛剛注意到,當您創建新的Bndtools項目時,已經有一個/ test源文件夾,它並未包含在最終的jar。這是一個恥辱PDE不支持這一點,我想我會手動編輯我的plugin.xml,並堅持使用Bndtools,這是更好的方式 謝謝! – JSlain
儘管Neil說,你可能想要在一個簡單的Bndtools項目中,我可以編輯一個plugin.xml文件,雖然不知道會有多遠。 –