我正在尝试在__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)
如何让这个测试通过?
答案 0 :(得分:5)
self.assertEqual("Dog named 'Fido'", repr(fido.get_self()))
或只是
self.assertEqual("Dog named 'Fido'", repr(fido))
否则assertEqual
正确地告诉您该字符串不等于该对象。当它呈现错误消息时它在对象上使用repr
,因此错误看起来有点混乱
答案 1 :(得分:0)
repr返回一个字符串,但fido.get_self()返回一个Dog对象,而不是一个字符串。
当出现断言错误时,它使用“repr”显示Dog实例的可读表示。
答案 2 :(得分:0)
通过print type(s)
检查断言所做的比较类型。您正在将__repr__
与str
进行比较。为了使它工作比较两个字符串。见Difference between __str__ and __repr__ in Python