我最近開始研究Django項目。首先,我閱讀book on TDD with Python和官方文檔(tests)。還有更多的博客。Django - 用mocks編寫單元測試
我注意到的一件事是,他們編寫測試訪問數據庫模型。考慮從here
def test_home_page_can_save_a_POST_request(self):
request = HttpRequest()
request.method = 'POST'
request.POST['item_text'] = 'A new list item'
response = home_page(request)
self.assertEqual(Item.objects.count(), 1)
new_item = Item.objects.first()
self.assertEqual(new_item.text, 'A new list item')
下面的代碼片段的測試斷言Item
對象的數量是否爲1。因此測試實際上增加了,並從數據庫中檢索數據。這不會讓測試變慢嗎?
如果測試是並行化的,如果還有其他測試會添加一個Item
對象,那麼測試用例可能會失敗,對嗎?
修補方法/對象如何?上面的代碼片段可以重構像這樣
@patch('my_app.views.Item')
def test_home_page_can_save_a_POST_request(self, mock_item):
request = HttpRequest()
request.method = POST
request.POST['item_text'] = 'A new list item'
response = home_page(request)
self.assertTrue(mock_item.objects.create.called)
我是Django的新手,我不熟悉這些實踐。我訪問的教程寫了與數據庫交談的測試。我想知道,這是否是在Django項目中測試的慣例。第二個片段(使用補丁和模擬)在Django生態系統中完美無瑕嗎?
編輯:與形式相同 - 模擬form.is_valid
返回方法True
或False
,前提是表單有單獨的單元測試。
P.S.使用Python進行TDD是一本非常棒的書,幫助我在入門時獲得了極大的擴展。我絕對推薦給任何學習Django的人。
測試在他們自己的事務中運行,因此只要可用/預期的數據相互獨立。 (感謝這本書的指針 - 看起來很棒!) –