如何让这个测试通过?

时间:2012-09-04 11:54:01

标签: python unit-testing

我正在尝试在__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)

如何让这个测试通过?

3 个答案:

答案 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