有了像MVP,MVC等好設計模式,我們的目標是將所有邏輯移出GUI。這給我們留下了一個輕量級GUI,理想情況下,它只需將其按鈕和字段「綁定」到某些業務邏輯層的屬性即可。這是一個很好的方法,因爲這個圖層將不受GUI的限制,我們可以輕鬆地爲它編寫單元測試。使用正確的抽象時,我們是否需要單元測試GUI?
我的問題是:這足夠嗎?或者我們還應該單元測試GUI層?
有了像MVP,MVC等好設計模式,我們的目標是將所有邏輯移出GUI。這給我們留下了一個輕量級GUI,理想情況下,它只需將其按鈕和字段「綁定」到某些業務邏輯層的屬性即可。這是一個很好的方法,因爲這個圖層將不受GUI的限制,我們可以輕鬆地爲它編寫單元測試。使用正確的抽象時,我們是否需要單元測試GUI?
我的問題是:這足夠嗎?或者我們還應該單元測試GUI層?
恕我直言,如果你從GUI中刪除整個邏輯,你不需要自動測試它。當然,你仍然需要運行它看看它是否應該:)
這是關於單元測試。對於集成測試,測試一切都是很好的,例如如果可能,由Selenium提供。
有時GUI並不是真的那麼愚蠢。例如,可能會有拖放支持,自定義組件,它們根據放置位置顯示其內容等等。在這種情況下,這些事情需要在集成測試和單獨測試中進行專門的測試。
大多數情況下,集成測試從UI層開始,我們最終也在這些情況下測試了很多UI層。我曾經從某人那裏讀到關於單元測試的評論,你不需要編寫可輕易破解的代碼的測試,例如getter/setter可以很容易被破壞(例如getter返回它應該做的值,而我們可以通過不返回值來輕鬆打破它),所以我們最終不會爲getter和setter編寫單元測試,除非嵌入了一些邏輯(在這種情況下,這些並不是真正的getter和setter)。
因此,如果GUI是完全愚蠢的,並且只有綁定,那麼不需要單元測試。