2009-01-21 176 views
28

除了在Uni課程中快速介紹之外,我還沒有使用單元測試。我目前正在編寫一個應用程序,並希望在此過程中教導我自己的TDD。問題是,我不知道要測試什麼或者真的如何。在Django/Python中編寫單元測試

我正在編寫一個Django應用程序,到目前爲止只創建了模型(並定製了管理應用程序)。這就是我寫的我的測試骨架至今:

class ModelTests(TestCase): 
    fixtures = ['initial_data.json',] 

    def setUp(self): 
     pass 

    def testSSA(self): 
     ssa = SSA.objects.create(name="sdfsdf", cost_center=1111, street_num=8, 
       street_name="dfsdfsf Street", suburb="sdfsdfsdf", 
       post_code=3333) 


    def testResident(self): 
     pass 

    def testSSA_Client(self): 
     pass 

我計劃寫一個函數來測試ModelTests類中的每一個模型。這是編寫測試的好方法嗎?另外,我應該測試什麼?創建一個所有領域的模型完成的作品?這是一個完整的模型失敗?是否有任何特殊情況經過測試(如null和is_required = False)?我相信ORM,據我所知,它經過了嚴格的測試,所以我不應該測試所有的方法嗎?

我需要測試用Django/Python編寫的Web應用程序需要什麼?一些例子會很好。

+0

一個TestCase的我可以無恥地宣傳我的教程來測試Django的應用程序,這不僅包括單元測試,也正確的瀏覽器行爲利用強大的硒測試:測試驅動的Django教程](HTTP://哈利.pythonanywhere.com /) – hwjp 2011-11-24 19:54:50

回答

36

是測試ModelTests類中的每個模型編寫測試的好方法的功能?

究竟應該對我進行測試?

  • 創建所有字段的模型完成的作品?

  • 半完整模型失敗?

  • 也就是說任何特殊情況下進行測試(如零和is_required = FALSE)?

  • 我已經在ORM,其中據我所知是經過大量測試的信任,所以我不應該需要測試所有的方法要這樣呢?

沒有太多的。

可以通過測試驗證規則,但直到你定義了某種形式的對象是沒有意義的。然後你需要測試一下 - 表單是否強制執行所有規則。每個表單至少需要一個TestCase類。函數將是一個場景 - 允許或不允許輸入的不同組合。

對於每個模型類,你需要至少一個TestCase類定義。 TestCases很便宜,定義了很多。

您的模型體現了您的「業務實體」定義。您的模型將具有實現業務規則的方法。你的方法會做一些事情,比如總結,過濾,計算,聚合,減少各種事物。您將擁有模型類的每個功能。

你沒有測試Django。您正在測試您的業務規則在Django中的實際工作方式。

後來,當你在你的應用程序有更多的東西(表單,視圖,網址等),你需要使用Django的單元測試客戶端行使每個URL的每個方法。同樣,每

+2

一旦我寫出了骨架,併爲一個模型定義了兩個測試,我意識到我浪費了我的時間。沒有什麼可以測試的,我不確定。儘管如此,我還沒有定義自定義方法。非常好的答案我很感激。 – 2009-01-22 11:46:09

9

我不完全確定你想要測試的細節,我需要更多的代碼片段,但我可以給你一些一般性的建議。

首先,閱讀「潛入Python」(免費在線!http://diveintopython3.ep.io/unit-testing.html)的單元測試章節,這是一般單元測試的一個很好的解釋,你需要做什麼以及爲什麼。其次,關於TDD,這是一種有價值的做法,但要小心過度依賴它,因爲我發現它可能會導致過度指定軟件,並進一步導致軟件無法被重新使用 - 開發並適應新的任務。這只是我的經驗,介意。另外,提供你不用教條式TDD是有價值的。第三,它告訴我,針對您的具體情況的最佳建議是努力測試您的邏輯,而不是您依賴於的框架的邏輯。這意味着經常測試半完整模型失敗等等可能不合適,因爲那不是你的邏輯,而是django的,所以應該已經被測試過了。更有價值的是測試一些預期的情況,你期望的實例化,你期望的異常等,以確保你的模型規範是正確的,然後繼續你的應用程序的更實質的邏輯。

+1

+1瞭解如何真正開始使用Python進行單元測試以及與TDD分享您自己的體驗。 – 2009-07-16 10:58:44

4

想必您已經閱讀測試Django Applications

開始測試您的應用程序的正常使用情況下,創建一個新用戶,增加了博客條目,等等只是典型的CRUD操作,然後再移動到邊緣的情況。基本上,您在應用程序中建立對後來改變的任何事情的信心不會破壞我期望應用程序行爲的方式。

模擬得到你的網址/ POST請求,並觀察響應(頭,狀態碼和內容)。您的應用程序是否呈現正確的視圖?使用正確的模板?在您的應用程序拋出異常的部分,嘗試觸發它們(例如,查看/編輯不存在的記錄以引發ObjectDoesNotExist)。

它通常是值得投入的跟蹤系統(例如Trac的),所以你可以添加一個新的測試爲每個登錄的缺陷。