2017-03-06 91 views
2

我想知道什麼是單元測試有道Django視圖,比如這一個:我應該在單元測試中測試視圖的屬性嗎?

class UserListView(LoginRequiredMixin, ListView): 

    model = get_user_model() 
    template_name = 'users/user_list.html' 
    ordering = 'last_name' 

    def get_queryset(self): 
     self.queryset = self.model.objects.all().annotate(
      full_name=Concat('first_name', Value(' '), 'last_name') 
     ) 
     return super().get_queryset() 

我目前的單元測試的方法get_queryset。這給了我100%覆蓋這個觀點,但我是否也應該測試,例如,單元測試中的默認排序?還是應該僅在集成/系統測試中進行測試(例如,使用Selenium或Django的客戶端)?

一方面,ordering屬性是視圖的一部分,它影響它的行爲,另一方面,它只被第三方代碼使用。

回答

1

在我看來,是的,你應該爲此添加一個測試。一方面,您可以打賭,Django已經進行了一項測試,確保該屬性可以像廣告一樣工作(Django的測試覆蓋率非常高)。

但是,我的推理是這樣的:假設上游ListView決定將該屬性的名稱更改爲其他名稱。比如,他們將其重命名爲list_ordering

快進7個月後,你會碰到Django的版本號來嘗試一些閃亮的新功能。編寫UserListView現在是一個遙遠的記憶。作爲一名開發人員,您想知道您要求的默認排序已停止在較新版本的Django中工作,並且此處的失敗測試會向您顯示 - 它會吸引您注意需要立即更新的某些代碼區域。

當然,我們應該在升級第三方庫時仔細閱讀發佈說明,但是更好的是讓測試直接與您交談!

+0

我肯定會測試它,但我的問題是,如果這應該在**單元測試**或集成/系統測試中進行測試。因爲這個屬性只是第三方代碼的某種「預設」,所以我不確定它適合在單元測試中測試,它應該儘可能少地依賴。 – rubick

+1

這取決於你。如果你有一個單獨的集成測試套件,那麼檢查那裏的列表排序行爲可能會更好,因爲這可能只能通過修改第三方代碼來實現。單元測試'UserListView'類中存在的屬性將毫無意義,因爲它會錯過最明顯的失敗模式。 – wim

+0

我有一個單獨的硒測試套件,所以我可以在那裏測試它。所以如果我理解正確的話,我不需要單元測試類的屬性,除非它們包含某種邏輯(例如列表理解),對吧? – rubick