2012-09-04 4 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 인스턴스의 읽을 수있는 표현을 표시합니다.

0

print type(s)을 수행하여 어설 션이 수행하는 비교 유형을 확인하십시오. __repr__str을 비교합니다. 그것이 작동하도록하려면 두 문자열을 비교하십시오. Difference between __str__ and __repr__ in Python

을 참조하십시오.
관련 문제