Python 单元测试类属性

标签 python python-unittest python-unittest.mock

我想弄清楚是否有一种方法(单元测试)验证属性和 setter 是否实际被调用以设置名称属性。

class DummyName:
    def __init__(self):
        self.name = ''

    @property
    def name(self):
        return self.name

    @name.setter
    def name(self, name):
        if not isinstance(name, basestring):
            raise Exception('Name must be a string.')
        self.name = name

尝试做这样的事情......

@mock.patch.object(DummyName, 'name', new_callable=PropertyMock)
def testNameProperty(self, mock_name):
    MockName = Mock()
    mock_name.return_value = MockName
    dummyName = DummyName()
    dummyName.name = 'test_name'
    # assert setter is called to set the name
    # assert name is called to get the name
    # assert name is 'test_name'

似乎从未访问过 name() 和 setter。谁有更好的主意?谢谢!

最佳答案

通过使用这样的模拟,您已经覆盖了您要测试的代码。模拟用于被测代码外部的调用。

对此代码的适当测试是断言如果您传递的不是字符串,则会引发异常。

def testNameProperty(self):
    dummyName = DummyName()
    with self.assertRaises(Exception):
        dummyName.name = 12345

关于Python 单元测试类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45680483/

相关文章:

python - 使用装饰器补丁在 Python 中模拟类

python - 为什么我不能在某个时刻评估 SymPy 中实现的函数的组合?

python - 在 Python 的 'and' 循环中使用 'while' 表达式

python - AssertListEqual 不改变类 __eq__ 方法

python-3.x - Pandas 和单元测试之间的冲突?

python - unittest 中的 assertRaises 没有正确捕获异常

Python 模拟 call_args_list 解包元组以对参数进行断言

pytest - 模拟雪花连接

python - 如何记录 ConfigParser 的内容?

python - 将 torch 张量从 [10,200,1] reshape 为 [2000,1,1] 时出现问题