2017-02-28 93 views
1

我已經嘗試了簡單的測試,並得到了在控制檯此錯誤消息:(Django的測試)assertIs錯誤

AIL: test_get (navbar.test.ContextManagerTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/media/me/049C11249C1111B2/backup me/Freizeit/Django Projekte/mysitetest/lib/navbar/test.py", line 16, in test_get 
    self.assertIs(cm.get('hi/du',0), 'hi') 
AssertionError: 'hi' is not 'hi' 

我們可以在最後一行看到,cm.get('hi/du',0)返回'hi'。但爲什麼測試失敗了?


首先,我thaught有可能是一個錯誤,但無論是代碼行:

self.assertIs('hi','hi') 

也不是這一個:

self.assertIs(['hi'][0],'hi') 

也不是這一個:

self.assertIs(cm.get('hi',0),'hi') 

失敗。


爲了更好的理解,我想補充的cm.get(mypattern,number)代碼:

def get(self, mypattern, number): 
    parts = mypattern.split('/').strip() 
    return parts[number] 

這是測試的失敗代碼:

def test_get(self): 
     cm = context.ContextManager([]) 

     self.assertIs(cm.get('hi',0), 'hi') 
     self.assertIs(cm.get('hi/du',0), 'hi') #this line failed 
     self.assertIs(cm.get('hi/du',1), 'du') 

它看起來像有split()功能有些麻煩,但至少有cm.get('hi/du',0)返回ned 'hi',因爲我們可以在上面的堆棧跟蹤中。

對於記得我加入了相關線路:

self.assertIs(cm.get('hi/du',0), 'hi') 
    AssertionError: 'hi' is not 'hi' 

小細節(我不知道這是否是重要的):我開始試驗用python3 manage.py test lib/navbar


所以你知道爲什麼失敗?或者你至少有一些猜測? 感謝您閱讀本文!

+0

您能不能給一些更多的信息上什麼是'context.ContextManager'。 爲什麼你需要使用assertIs? ,基本上它斷言對象是否相同。我想你可以使用AsserEqual,如果你只是想比較值。 –

+0

坦克你!那是我需要的信息。把它寫成答案,我會將其標記爲已解決。那是誤會。有時它至少比它看起來容易;-) – Asqiir

回答

2

您需要的斷言方法是assertEqual而不是assertIs

assertEqual(a, b):比較的和b的值

assertIs(a, b):檢查是否a和b指向同一個對象,即A和B的ID是一樣的