2011-09-30 42 views
2

我目前在每個應用程序中使用一個fixtures文件,但隨着項目的增長,測試花費的時間太長,我相信爲每個測試課程加載的(現在很大的)燈具都有問題。在Django中處理測試數據的最佳做法是什麼?

由於擔心重複和維護,我避免了很多較小的燈具,但我知道這是不可避免的。

在我走下那條路之前,我想我會問別人用夾具來測試他們的應用程序/項目。

回答

0

請確保您使用sqlite進行測試。與其他數據庫引擎相比,速度有很大差異。

+0

它的速度更快,因爲它不」 t驗證您輸入的任何數據。 –

+0

@Mark,關於數據驗證的觀點在大多數情況下與使用django無關。由於sqlite在內存中運行,所以用sqlite進行測試的速度「非常快」。可以配置django設置,以便mysql或postrges使用內存表而不是常規表,如果這樣做,那麼數據庫之間沒有顯着差異。 – Ski

+1

編寫測試的目標不是要有一個快速測試套件;這是爲了確保您的代碼在您將其移至不應使用Sqlite的生產環境中時應該做它應該做的事情。在Django中編寫代碼以及後續的將通過Sqlite傳遞並在真實數據庫上失敗的測試用例是微不足道的。通過使用Sqlite進行測試,你不會做任何好處。 –

2

是的,你遇到了一大套燈具的問題。不斷的反序列化/加載會隨着您的測試套件的增長而增加。我會建議編寫效用函數來根據需要創建數據,而不是依靠燈具。例如,你可能有一個函數來創建一個新的auth.User,如:

def create_user(data=None): 
    data = data or {} 
    defaults = { 
     'username': get_random_string(), 
     'email': get_random_email(), 
     'password': get_random_string() 
    } 
    defaults.update(data) 
    return User.objects.create_user(**defaults) 

寫一個函數生成一個隨機字符串/電子郵件作爲練習留給讀者:)

相關問題