2017-06-20 73 views
3

我們有一個相當大的Eclipse RCP應用程序,不確定如何正確測試它的插件。如何高效地進行JUnit測試Eclipse RCP插件

  • 對於每個插件,都有一個包含單元測試的測試片段。
  • 對於較小的測試,不需要運行RCP平臺,我們只需調用「標準」JUnit測試運行器即可。

enter image description here

  • 對於測試,需要在RCP平臺,有使用JUnit插件測試運行,以測試它的可能性。

enter image description here

  • 對於JUnit的插件測試,它可以定義當RCP平臺啓動的插件被加載。

enter image description here enter image description here

  • 問題:運行JUnit插件測試需要花費大量的時間(秒而不是millicseconds簡單的JUnit測試)和資源,因爲RCP平臺和所有插件需要啓動。

  • 問題:如何有效地最小化爲測試運行的插件? 我有哪些選擇可以最大限度地減少對RCP平臺的依賴(例如首選項服務和擴展點)? 是否有一些Mocking庫或至少一些嘲笑RCP平臺服務的最佳實踐?

現在我不能想象做了JUnit插件測試運行一些體面的TDD,它只是需要太長時間來執行這些測試。

任何有關該主題的建議和經驗非常受歡迎!

回答

4

我能感覺到你的痛苦:插件測試很糟糕!而且我還沒有找到一個完全令人滿意的解決方案。

儘管您可能會獲得一些(毫秒 - 秒)的秒數,因此您將所需的插件減少到了最低限度,但我發現它不切實際,因爲依賴關係圖中的更改通常還需要調整啓動配置。如果您的(共享)啓動配置中有平臺依賴片段(即SWT),則情況會變得更糟。我通常會回退到所有工作空間並啓用目標插件選項,並且沒有看到啓動速度的顯着差異。

我不知道RCP平臺的模擬庫。

除非是非常簡單的情況,否則我會避免嘲笑平臺的某些部分,因爲您可能容易導致行爲錯誤。另請參閱本文後的內容:https://stackoverflow.com/a/31938571/2986905

我的做法是將平臺依賴關係儘可能地保留在我的應用程序代碼之外,這樣我就可以編寫純JUnit測試。對平臺API的自定義抽象可以幫助您重複使用這些案例。

另外,可以在沒有工作臺的情況下使用大量的平臺API,當然也包括所有SWT和JFace API,首選項......因此,用最小的依賴關係編寫小而簡單的類又有助於遠離插件測試。例如,將視圖的內容從IViewPart(或其e4等價物)中分離出來,可以在不需要視圖的情況下編寫測試,從而可以編寫運行的工作臺實例(如果我明確指出,請原諒)。

+1

不錯的答案。在Robert Martin的其中一本書中提出了一個核心建議:*在可能的情況下,編寫POJO,以便您可以正確地單元測試其邏輯*。 – GhostCat

+1

感謝您的貢獻!我同意,我正試圖讓平臺儘可能地擺脫一切。不幸的是,我不是唯一編寫代碼的應用程序;)應用程序模型,平臺和首選項/ UI的封裝對許多類都不是真的。重構優化可測試性是很危險的,因爲代碼沒有經過適當的測試;)並且從經驗上講,它們有時會產生奇怪的副作用並破壞事物。 – kerner1000