2011-06-05 43 views
2

我有一套測試,我寫的應用程序使用Django的默認身份驗證,但現在我添加了Atlassian Crowd作爲身份驗證方法,現在這些測試失敗,主要是因爲Crowd服務器不是當我想在家裏跑我的測試的時候,遠程認證的單元測試

每個應用程序都有這個在它的設置()方法

def setUp(self): 
    """Set up the shared test data.""" 
    self.client.login(username='admin', password='letmein') 

我被註釋掉AUTHENTICATION_BACKENDS工作圍繞它的那一刻,但不會在CI服務器上運行。

我不認爲我得到的錯誤是很重要的,但對於完整性:

URLError: <urlopen error [Errno 8] nodename nor servname provided, or not known> 

我嘗試添加這兩種身份驗證的後端到AUTHENTICATION_BACKENDS,我仍然會得到相同的結果。

什麼是我的選擇讓這些測試通過?

有什麼辦法可以強制用戶登錄嗎?我能以某種方式嘲笑授權對象嗎?

我可以在設置AUTHENTICATION_BACKENDS部分檢查它是否在測試模式下運行嗎?但後來我爲我的測試寫了特殊的情況,這種打敗對象。

回答

3

您可以更改setUp方法中的AUTHENTICATION_BACKENDS設置,然後將其更改回tearDown。這question's accepted answer只是一個例子,但具有不同的設置。

+0

這是行不通的,但這真的是最好的辦法嗎?從測試中更改設置或在設置中檢測什麼是env,有什麼區別?你在跑?無論哪種方式,您都不是在生產環境中測試代碼。 – 2011-06-06 00:03:34

+0

如果您正在測試認證部分,那麼您是正確的。如果你只想測試代碼本身,而不是保護它的機制,那麼這可能是解決方案。 – 2011-06-06 03:29:03

+0

的確如此,我認爲在這方面它與使用mock並不太相似。 – 2011-06-06 08:53:59