我正在使用属性设置器,如果输入不是预期的类型,则会引发错误。我也在对所有功能进行单元测试,并且想测试使用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
,但这不适用于属性。
使用assertRaises
的上下文管理器变体应该可以工作:
class TestA(unittest.TestCase):
def test_a_setter(self):
a = A(5)
with self.assertRaises(TypeError):
a.var = 'a'
在大多数情况下,这也使测试的可读性更好,所以我通常更喜欢这种拼写。