如何在Python中编写用于变量分配的unittest?

Can*_*ic3 3 python unit-testing python-2.7 python-unittest

这是在Python 2.7。我有一个名为的类class A,并且有一些属性由用户设置时会引发异常:

myA = A()
myA.myattribute = 9   # this should throw an error
Run Code Online (Sandbox Code Playgroud)

我想写一个unittest确保它引发错误的代码。

创建测试类并继承后unittest.TestCase,我尝试编写如下测试:

myA = A()
self.assertRaises(AttributeError, eval('myA.myattribute = 9'))
Run Code Online (Sandbox Code Playgroud)

但是,这引发了syntax error。但是,如果尝试eval('myA.myattribute = 9'),它将抛出属性错误,应有的错误。

如何编写单元测试以正确测试?

谢谢。

end*_*and 5

您还可以assertRaises用作上下文管理器:

with self.assertRaises(AttributeError):
    myA.myattribute = 9
Run Code Online (Sandbox Code Playgroud)

如果您有兴趣文档中会显示更多示例assertRaises的文档也对此主题有更多详细信息。

从该文档中:

如果仅给出异常和可能的msg参数,则返回一个上下文管理器,以便可以将内测代码而不是作为函数编写:

with self.assertRaises(SomeException):
     do_something()
Run Code Online (Sandbox Code Playgroud)

这正是您要尝试做的。