单元测试只传递单个值而不是获取多个值

Unittest only passing single value rather than getting multiple values

标题可能有点令人困惑,但我需要弄清楚从 python 装饰器中获取 first_name 和 last_name 并将其插入的正确语法我的单元测试。

class Person:

    def __init__(self, first_name = '', last_name = ''):

        self.first_name = first_name
        self.last_name = last_name

    @property
    @getting first name
    def first_name(self):
        return self._first_name
    
    @first_name.setter
    #setting first name
    def first_name(self, first_name):
        self._first_name = first_name.capitalize()

    @property
    #getting last name
    def last_name(self):
        return  self._last_name

    @last_name.setter
    #setting last name
    def last_name(self, last_name):
        self._last_name = last_name.capitalize()

这是我的单元测试片段

class TestPerson(unittest.TestCase, Person):

    def test_first_name(self):
        testFirst = Person('James')
        self.assertEqual(testFirst.first_name, 'James')

    def test_last_name(self):
        testLast = Person('Jonah')
        #assertionerror is thrown here
        #AssertionError: '' != 'Jonah'
        #+Jonah
        self.assertEqual(testLast.last_name, 'Jonah')

虽然 Person('James') 有效,但我知道它不适用于 Person('Jonah'),因为它只传递名字。问题是,none 我四处摸索似乎使它正常工作。我不能直接去 Person.last_name('Jonah') 因为 属性 装饰器不可调用,并且修补 _last_name、getgetattribute 也不在这里工作。

如果有人知道使这个单元测试通过的正确语法,请发给我!我真的想不通。

提前致谢!

您的 class 的 __init__ 方法接受不同属性的关键字参数,在您的测试中将参数作为关键字传递。如果您不使用关键字参数,那么第一个位置参数将传递给 first_name,因为它是定义的第一个关键字参数

def test_first_name(self):
    testFirst = Person(first_name='James')
    ...

def test_last_name(self):
    testLast = Person(last_name='Jonah')
    ...