Python - 测试属性抛出异常
给定的内容是:
def test_to_check_exception_is_thrown(self):
# Arrange
c = Class()
# Act and Assert
self.assertRaises(NameError, c.do_something)
如果 do_something
抛出一个异常,测试就通过了。
但是我有一个属性,当我把 c.do_something
替换成 c.name = "Name"
时,我收到了一个关于我的测试模块没有被导入的错误,Eclipse 还把等号标红了。
我该如何测试一个属性是否会抛出异常呢?
编辑:
setattr
和 getattr
对我来说是新东西。它们在这个情况下确实帮了我,感谢!
5 个回答
8
第二个参数给 assertRaises
时应该是一个可调用的对象。
比如说,像 class.name = "Name"
这样的赋值语句并不是可调用的,所以这样写是行不通的。你可以用 setattr
来进行赋值,像这样:
self.assertRaises(NameError, setattr, myclass, "name", "Name")
另外,你不能给 class
赋值,因为它是一个关键字。
17
assertRaises
需要一个可以调用的对象。你可以创建一个函数并把它传进去:
obj = Class()
def setNameTest():
obj.name = "Name"
self.assertRaises(NameError, setNameTest)
还有一种方法是使用 setattr
:
self.assertRaises(NameError, setattr, obj, "name", "Name")
你原来的代码会出现语法错误,因为赋值是一个语句,不能放在表达式里面。