如何在python中为变量赋值编写unittest?

时间:2016-10-19 01:50:35

标签: python python-2.7 unit-testing python-unittest

这是Loan Calculator Loan amount: 1000 Interest rate: 9 Number of payments: 100 ('Monthly payment: ', 9000.0) 。我有一个名为Python 2.7的类,有些属性我想在用户设置时抛出异常:

class A

我想写一个myA = A() myA.myattribute = 9 # this should throw an error 来确保这会引发错误。

创建测试类并继承unittest后,我尝试编写这样的测试:

unittest.TestCase

但是,这会引发myA = A() self.assertRaises(AttributeError, eval('myA.myattribute = 9')) 。但是,如果我尝试syntax error,它会抛出属性错误。

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

感谢。

2 个答案:

答案 0 :(得分:5)

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

with self.assertRaises(AttributeError):
    myA.myattribute = 9

documentation shows more examples for this if you are interestedassertRaises的文档也有关于此主题的更多详细信息。

从该文件:

  

如果只给出了异常和可能的msg参数,则返回一个上下文管理器,以便可以编写测试中的代码   内联而不是功能:

with self.assertRaises(SomeException):
     do_something()

这正是你想要做的。

答案 1 :(得分:2)

self.assertRaises将可调用的(以及可选的一个或多个可调用的参数)作为其参数;您提供的是通过调用callable及其参数产生的值。正确的测试是 self.assertRaises(AttributeError, eval, 'myA.myattribute = 9')

# Thanks to @mgilson for something that actually works while
# resembling the original attempt.
self.assertRaises(AttributeError, eval, 'myA.myattribute = 9', locals())

但是,您应该使用assertRaises作为上下文管理器,这样您就可以编写更自然的

with self.assertRaises(AttributeError):
    myA.myattribute = 9