2012-09-04 97 views
4

我試圖在__repr__上測試返回類型。這不是一個字符串,它是什麼?這裏發生了什麼事?如何通過此測試?

import unittest 
class MyClass(unittest.TestCase): 
    class Dog(object): 
      def __init__(self, initial_name): 
       self._name = initial_name 

      def get_self(self): 
       return self 

      def __repr__(self): 
       return "Dog named '" + self._name + "'" 

    def runTest(self): 
     fido = self.Dog("Fido") 
     self.assertEqual("Dog named 'Fido'", fido.get_self()) #Fails! 

test=MyClass("runTest") 
runner=unittest.TextTestRunner() 
runner.run(test) 

運行這給:

FAIL: runTest (__main__.MyClass) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/xxxxx/fido.py", line 15, in runTest 
    self.assertEqual("Dog named 'Fido'", fido.get_self()) 
    AssertionError: "Dog named 'Fido'" != Dog named 'Fido' 

---------------------------------------------------------------------- 
Ran 1 test in 0.006s 

FAILED (failures=1) 

我怎樣才能得到這個測試通過?

回答

5
self.assertEqual("Dog named 'Fido'", repr(fido.get_self())) 

或只是

self.assertEqual("Dog named 'Fido'", repr(fido)) 

否則assertEqual正確告訴您字符串不等於對象。當它呈現錯誤消息時,它在對象上使用repr,所以錯誤看起來有點令人困惑

0

repr返回一個字符串,但fido.get_self()返回一個Dog對象,而不是一個字符串。

當存在斷言錯誤時,它使用「repr」來顯示Dog實例的可讀表示。