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 に答える