2015-08-21 54 views
10

剛剛接受測試,我正在Django(Django-rest-framework)中測試我的API。Django testing rest-framework:APIRequestFactory vs APIClient

我正在爲我的視圖設置測試,那就是我的API端點。現在查看文檔,我可以使用API​​RequestFactory或APIClient。兩者似乎都做同樣的事情。

這兩者之間有什麼區別,以及爲什麼/何時應該使用其中一種?

回答

17

如果你看看tools and helpers for testing "standard" views in Django你會發現一些非常類似的東西,TestClientRequestFactory

RequestFactory與測試客戶端共享相同的API。但是, 不像瀏覽器那樣工作,RequestFactory提供了一種方式 來生成一個請求實例,該實例可以用作任何視圖的第一個參數 。這意味着您可以像測試任何其他函數一樣測試視圖函數 - 作爲黑箱,具有完全已知的 輸入,測試特定輸出。

TestClient讓您與您的網站從用戶瀏覽網站的觀點互動(...雖然測試JavaScript是另一個故事)。測試您的網站時會有許多事情發揮作用(會話,中間件,URL路由等)。因此,這些通常是更多的整合測試,模擬與您的網站或API的真實世界交互。

A RequestFactory允許您以非常孤立的方式測試您的視圖。您可以構建請求並測試您的視圖,而無需設置您的網址或關注中間件等事件。 因此,這更接近於典型的單元測試。

也就是說,這兩種類型的測試都很有用。爲了得到一個普遍的感覺,如果你的API按預期工作,我可能會開始使用API​​Client,並在涉及更復雜的視圖時使用RequestFactories。但正確的組合取決於您的具體應用。