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)

我怎样才能让这个测试通过?

4

3 回答 3

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

要不就

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

否则assertEqual正确地告诉您字符串不等于对象。当它呈现它repr在对象上使用的错误消息时,该错误看起来有点混乱

于 2012-09-04T12:00:38.037 回答
0

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

当出现断言错误时,它使用“repr”来显示您的 Dog 实例的可读表示。

于 2012-09-04T12:03:08.767 回答
0

通过做检查您的断言所做的比较类型print type(s)。您正在__repr__str. 为了使它起作用,比较两个字符串。请参阅Python 中 __str__ 和 __repr__ 之间的区别

于 2012-09-04T12:13:02.600 回答