在属性设置器中设置引发异常的单元测试

问题描述 投票:0回答:1

我正在使用属性设置器,如果输入不是预期的类型,则会引发错误。我也在对所有功能进行单元测试,并且想测试使用setter时是否确实引发了异常。

我试图得到可赎回权给unittest.TestCase.assertRaises。这是一个例子:

import unittest

class A:
    def __init__(self, num):
        self.var = num

    @property
    def var(self):
        return self._var

    @var.setter
    def var(self, new):
        if not isinstance(new, int):
            raise TypeError
        self._var = new

class TestA(unittest.TestCase):
    def test_a_setter(self):
        a = A(5)
        self.assertRaises(TypeError, a.var = 'a') #<--- a not working try

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

有没有办法让二传手可赎回?否则,我将只使用try ... except块,但这看起来并不干净。

我得到的另一个想法是使用setattr,但这不适用于属性。

python unit-testing properties callable
1个回答
0
投票

使用assertRaises的上下文管理器变体应该可以工作:

class TestA(unittest.TestCase):
    def test_a_setter(self):
        a = A(5)
        with self.assertRaises(TypeError):
            a.var = 'a'

在大多数情况下,这也使测试的可读性更好,所以我通常更喜欢这种拼写。

© www.soinside.com 2019 - 2024. All rights reserved.