2015-04-17 79 views
3

如何在開發Eclipse插件時進行TDD? 因爲PDE是一個清單優先的方法,所以沒有'測試作用域依賴'這樣的東西。Eclipse插件+ TDD?

我應該做另一個項目,這是基於maven的?並直接在它的構建路徑中添加插件項目? (因爲插件項目不是基於maven的,它不會在.m2中)。這似乎不是一個偉大的設置...

我讀過的地方,插件片段可以做的工作,但我必須手動添加MockitoEasyMock到自定義存儲庫?或者將其包含在該片段內的類路徑中?這似乎不太方便。

我已經習慣了Bndtools,但它適合eclipse插件嗎?

此外,我通常使用InfinitestMoreUnits,我猜測後者將不會工作,如果測試位於第二個項目?

最後,我剛剛閱讀了Eclipse Tycho,這是一組用於構建eclipse插件的maven插件集 ,它會是一個合適的選擇,即使它在孵化器中嗎?

回答

3

我們已經在多個項目中使用了測試片段多年,現在發現它是最實用的方法。

由於片段與主機包共享相同的類加載器,因此您的測試可以訪問內部包和包私有方法,就像沒有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存儲庫。

有關該主題的更多資源:

+2

作爲牽頭開發者,我可以證實,我們確實使用Bndtools發展Bndtools和它的作品。我們不得不手動編輯'plugin.xml'。用於plugin.xml的PDE編輯器在非PDE項目中使用時引發NPE :-( –

+0

我剛剛注意到,當您創建新的Bndtools項目時,已經有一個/ test源文件夾,它並未包含在最終的jar。這是一個恥辱PDE不支持這一點,我想我會手動編輯我的plugin.xml,並堅持使用Bndtools,這是更好的方式 謝謝! – JSlain

+0

儘管Neil說,你可能想要在一個簡單的Bndtools項目中,我可以編輯一個plugin.xml文件,雖然不知道會有多遠。 –