2015-06-13 73 views
3

我剛剛開始使用Django,所以這可能是一些愚蠢的事情,但我甚至不知道在這一點上該如何處理Google。Django測試用例無法運行方法

我有一個看起來像這樣的方法:

def get_user(self,user): 
    return Utilities.get_userprofile(user) 

的方法是這樣的:

@staticmethod 
def get_userprofile(user): 
    return UserProfile.objects.filter(user_auth__username=user)[0] 

當我包括這在視圖中,一切都很好。當我寫測試用例使用任何的實用工具類裏面的方法,我得到無回:

兩個測試用例:

def test_stack_overflow(self): 
    a = ObjName() 
    print(a.get_user('admin')) 

def test_Utility(self): 
    print(Utilities.get_user('admin')) 

結果:

Creating test database for alias 'default'... 
None 
..None 
. 
---------------------------------------------------------------------- 

有人能告訴我爲什麼這是在視圖中工作,但不在測試用例的內部工作,並且不會產生任何錯誤消息?

感謝

回答

4

驗證您的單元測試是否符合以下內容,

  1. TestClass必須寫在文件名test*.py
  2. TestClass一定是從unittest.TestCase
  3. TestClass子類應該有一個setUp函數來創建對象(通常以這種方式完成,但對象創建可以發生在在數據庫中的測試功能也一樣)
  4. TestClass功能時,應開始test以便被標識並且通過./manage.py測試命令
  5. TestClass運行可以具有tearDown正常結束單元測試用例。

測試用例的執行過程:

當您運行./manage.py test的Django建立一個test_your_database_name,並在此setUp功能(平時)中提到的所有對象,並開始在佈局內的順序執行測試功能類,一旦執行所有測試函數,最後查找tearDown函數,如果測試類中存在該函數並且銷燬測試數據庫,則執行該函數。

可能是,因爲您可能沒有在setUp函數或TestClass中的其他地方調用對象創建。

您可以發佈整個追溯和測試文件來幫助您更好嗎?

+0

嘿,你提到的最後一點可能就是它!該方法通過用戶名獲得用戶對象,如果有一個全新的數據庫,那麼它顯然不會拉入任何東西。我想我需要在開始測試之前創建一些對象,以確保它是有效的。 – browskie

+0

如果答案有幫助,您可以接受答案。 –

+0

我絕對會;讓我先驗證它:)這通常如何處理?在測試用例中有沒有在數據庫中設置一些項目的方法? – browskie