Python unittest AssertionError <names.Person объект в 0x0293A6B0 >>! =

1

Сегодня я начал unittest, и у меня возникла проблема, я чувствую, что это что-то очевидное, но, возможно, вы, ребята, это увидите. Этот блок является файлом, который содержит информацию

names.py

class Person:
  def __init__(self, firstname, lastname, middlename = ""):
    self.firstname = firstname
    self.lastname = lastname
    self.middlename = middlename
  def fullname(self):
      if self.middlename:
          return self.firstname + " " + self.middlename + " " + self.lastname

      else:
          return  self.firstname + " " + self.lastname

и это тестовое приложение

import unittest
from names import Person




class TestName(unittest.TestCase):

    def test_fullname(self):

        rashka = Person("John","Smith","James")

        self.assertEqual(rashka.fullname, "John James Smith")

if __name__ == "__main__":
      unittest.main()

и я получаю эту ошибку, когда я ее запускаю

    AssertionError: <bound method Person.fullname 
    of <names.Person object at 0x0371A690>> != 'John James Smith'
  • 2
    Вам нужно вызвать метод: rashka.fullname()
Теги:
unit-testing

2 ответа

0
Лучший ответ

Как и другие ответы, fullname - это метод на вашем экземпляре, и поэтому его нужно вызывать как любую другую функцию:

>>> rashka.fullname
<bound method Person.fullname of <names.Person object at 0x0371A690>>

>>> rashka.fullname()
'John James Smith'

В качестве альтернативы вы также можете использовать декоратор property чтобы получить доступ к атрибуту:

class Person:
    def __init__(self, firstname, lastname, middlename = ""):
        self.firstname = firstname
        self.lastname = lastname
        self.middlename = middlename

    @property            # <-- new
    def fullname(self):
        if self.middlename:
            return self.firstname + " " + self.middlename + " " + self.lastname
        else:
            return  self.firstname + " " + self.lastname

Теперь, rashka.fullname вернет имя (без скобок), как вы писали в своем тесте.

>>> rashka.fullname
'John James Smith'
1

Вам нужно вызвать rashka.fullname() иначе вы сравниваете метод с str.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню