2012-03-15 32 views
0

我已經開始爲我的Django應用程序編寫一些測試,但我不確定如何最好地構造代碼。Django測試依賴於其他頁面/行爲

假設我有一個註冊頁面和一個僅用於登錄用戶的頁面。 我的第一個計劃是有一個較早的方法執行登錄測試頁面寄存器和後面的方法使用:

def test_register_page(self): 
    //send request to register page and check user has been registered correctly 
def test_restricted_page(self): 
    c = Client(); 
    c.login("someUser","pass"); 
    c.post("/someRestrictedPage/"); 
    //Test response 

然而,這意味着現在的我的測試一個依賴於其他。
我看到的替代方法是在setUp()中調用寄存器,但這仍然意味着受限制的頁面測試依賴於寄存器頁面的工作。

我可以嘗試在安裝程序中手動創建新用戶,我也不喜歡它,因爲這不是測試系統創建的用戶。

測試這種情況的通常模式是什麼?

回答

1

您正試圖在一個測試用例中混合使用很多不同的功能。一個乾淨的設計將具有一個測試用例

  • 用於用戶註冊和
  • 一個用於圖。

讓它們相互依賴會在它們之間引入很多依賴關係 - 並且 - 如果測試失敗,錯誤將更難以調試。註冊測試的成功應通過正確創建用戶實例來確定(以便檢查用戶的必要屬性等),而不是通過能夠在某個頁面上登錄。因此,您需要爲視圖測試用例設置一個「正確」的用戶實例。這看起來可能比必要的複雜一點,但它將使未來的維護更容易。 你所要做的是更多的東西像一個集成測試,測試整個系統,但在此之前,你應該在功能單位將系統分割起來,做單元測試這個單位! 單個測試越小且明確,越容易進行維護和調試。

+1

對不起,如果我不清楚。這些應該是兩個單獨的單元測試,一個測試限制對登錄用戶的訪問,另一個測試註冊用戶。聽起來像setup()應該手動創建一個用戶進行測試。謝謝你的幫助。 – Jim 2012-03-15 12:53:45

+0

@Jim:如果你對這個主題感興趣,在Django中有一個很好的談話單元測試,特別是爲測試創建對象的一些舒適的方法:https://www.youtube.com/watch?v=ickNQcNXiS4&context = C44039cbADvjVQa1PpcFPQunG_ULh73WnDAl7g7Y8JDYIDmeEZjYQ = – 2012-03-15 13:30:34