首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >物业装修单位测试的实现

物业装修单位测试的实现
EN

Stack Overflow用户
提问于 2022-04-27 08:47:50
回答 1查看 151关注 0票数 0

我有这样的代码来收集一个人的名字。

代码语言:javascript
复制
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()

我想要创建一个单元测试来测试类/名字/属性装饰器,我想看看我是否用了正确的方法来完成它?

代码语言:javascript
复制
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:所有代码已调整到编辑建议。谢谢大家!会继续慢慢修正我的错误哈哈。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-27 19:18:18

首先,让我们在担心测试类之前修复这个类。

代码语言:javascript
复制
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属性交互,属性名称本身应该是公共接口的一部分(即,不以_作为前缀)。(请注意,属性和后台属性不能共享相同的名称。)

现在,测试:

代码语言:javascript
复制
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查找适当命名的类,实例化它们,然后使用这些实例运行适当命名的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72025852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档