2012-11-05 96 views
1

我通過閱讀文檔瞭解如下:客戶端和客戶端在Django TestCase中的區別究竟是什麼?

  1. 客戶端是TestCase的子類。當我們運行manage.py test時,爲每個啓動'test_'的方法創建一個我們的SimpleTest類(它從TestCase繼承)的一個實例。這是self
  2. 客戶端是客戶端的一個子類。我們可以創建新的客戶端實例,有時這樣做會很有幫助。
  3. 不知何故,當我們鍵入self.client時,我們所指的是一個特定的客戶端,它在創建TestCase時被實例化,並且而不是客戶端類在TestCase下面的一層。

這是正確的嗎?如果是這樣,這是怎麼回事 - 與超類有關?

+0

self.client **不是**只是客戶端 - 第一個是屬性,第二個是變量。我相信給代碼示例將幫助我們理解您的問題,並且親自嘗試此代碼可以幫助您瞭解其中的差異。 – Tadeck

+0

感謝您的幫助。我現在更清楚 - 客戶端不是來自TestCase,而是來自測試,正如您所說,self.client只是一個指向此客戶端的屬性。這是一個有用的區別,謝謝。 –

回答

1

如果我正確理解你的問題和documentation。提供client屬性是爲了方便起見,每個測試都有權訪問from django.test.client import Client客戶端實例。

你的第一個問題:

  1. 客戶端的TestCase的子類。當我們運行manage.py測試時,爲每個啓動'test_'的方法創建一個我們的SimpleTest類的實例(它繼承自TestCase)。這是自我。

from source它看起來不像Client是TestCase的子類。

class Client(RequestFactory): 
    """ 
    A class that can act as a client for testing purposes. 

從源頭上我看不到? Client類正在實例化並附加到TestCase實例,但它在某處。

Django是完全開放的源碼,所以給一些空閒時間很容易找到事情和事情發生的地方。 https://github.com/django/django以下導入路徑和四處搜尋可以找到所有答案

+0

啊哈 - 你說的沒錯!我確定我會在某處閱讀「self.client.Client」,但今天早上我無法在任何地方找到它 - 多麼愚蠢!正如你所說,客戶端來自django.test,而不是TestCase,並且測試中的self.client足夠自然地指向該實例而沒有任何衝突。 –

+0

也感謝鏈接到github上的實際源代碼。這非常有幫助,我相信未來我會回答許多問題。 –