我有这样的代码来收集一个人的名字。
class Person:
#initializing the variables and giving them an empty string as a baseline.
def __init__(self, first_name = '', last_name = ''):
self.first_name = first_name
self.last_name = last_name
@property
#getting first name and returning it for future use.
def first_name(self):
return self._first_name
#setting the first name
@first_name.setter
def first_name(self, first_name):
#capitalizing the first name.
self._first_name = first_name.capitalize()
@property
#getting last name and returning it for future use.
def last_name(self):
return self._last_name
@last_name.setter
#setting last name
def last_name(self, last_name):
#capitalizing last name
self._last_name = last_name.capitalize()我想要创建一个单元测试来测试类/名字/属性装饰器,我想看看我是否用了正确的方法来完成它?
import unittest
from person import Person
class TestPerson(unittest.TestCase):
def test_first_name(self):
Person._first_name = first_name('FakeName')
self.assertEqual(Person._first_name(), 'FakeName')
#updated code to fix errors pointed out. The first name works!
#the last name does not.
def test_last_name(self):
testLast = Person('LastName')
#Throws assertion error '' != 'LastName here.
self.assertEqual(testLast.last_name, 'LastName')
if __name__ == "__main__":
unittest.main()最简单的编码运行和传递都没有错误,但我想知道它是否使用了属性装饰器?当涉及到装饰师和单元测试时,我是个新手,所以我想确保这实际上是使用属性装饰器,而不是绕过它,或者我应该以其他方式格式化它(或者像其他一些论坛所建议的那样使用unittest.mock,但我一点也不熟悉.mock )。
编辑:因为我在凌晨3点完全聪明,所以我完全不去设置一个从unittest继承的类。这已在第二个代码剪辑中进行了调整。还将我的last_name添加到Person和unittest中,以获得更多关于这两者应该如何交互的信息。
编辑2:所有代码已调整到编辑建议。谢谢大家!会继续慢慢修正我的错误哈哈。
发布于 2022-04-27 19:18:18
首先,让我们在担心测试类之前修复这个类。
class Person:
def __init__(self, first_name=''):
self.first_name = first_name
@property
def first_name(self):
return self._first_name
@first_name.setter
def first_name(self, first_name):
self._first_name = first_name.capitalize()
@property
def last_name(self):
return self._last_name
@last_name.setter
def last_name(self, last_name):
#capitalizing last name
self._last_name = last_name.capitalize()只有getter和setter直接与_first_name属性交互,属性名称本身应该是公共接口的一部分(即,不以_作为前缀)。(请注意,属性和后台属性不能共享相同的名称。)
现在,测试:
import unittest
from person import Person
class TestPerson(unittest.TestCase):
def test_first_name(self):
p = Person('fakeName')
self.assertEqual(p.first_name, 'FakeName')
if __name__ == "__main__":
unittest.main()您需要创建一个Person实例,然后检查属性返回的值是否与预期的名称匹配。在本例中,我向Person传递了一个非大写名称,以检查setter是否将其大写为预期。
此外,测试方法必须是( unittest.TestCase的一个子类)的实例方法,以便unittest.main查找和运行它。main查找适当命名的类,实例化它们,然后使用这些实例运行适当命名的方法。
https://stackoverflow.com/questions/72025852
复制相似问题