Fin*_*las 11 python ironpython unit-testing properties
鉴于:
def test_to_check_exception_is_thrown(self):
# Arrange
c = Class()
# Act and Assert
self.assertRaises(NameError, c.do_something)
Run Code Online (Sandbox Code Playgroud)
如果do_something抛出异常则测试通过.
但是我有一个属性,当我替换时c.do_something,c.name = "Name"我得到一个关于我的测试模块没有被导入的错误,Eclipse突出显示了等号.
如何测试属性会引发异常?
编辑:
setattr并且getattr是新的我.在这种情况下,他们肯定有所帮助,谢谢.
int*_*jay 17
assertRaises期待一个可调用的对象.您可以创建一个函数并传递它:
obj = Class()
def setNameTest():
obj.name = "Name"
self.assertRaises(NameError, setNameTest)
Run Code Online (Sandbox Code Playgroud)
另一种可能性是使用setattr:
self.assertRaises(NameError, setattr, obj, "name", "Name")
Run Code Online (Sandbox Code Playgroud)
您的原始代码会引发语法错误,因为赋值是一个语句,不能放在表达式中.
Rap*_*ens 12
由于Python 2.7和3.1 assertRaises()可以用作上下文管理器.请参阅此处的Python 2和Python3.
所以你可以用这样的with指令编写你的测试:
def test_to_check_exception_is_thrown(self):
c = Class()
with self.assertRaises(NameError):
c.name = "Name"
Run Code Online (Sandbox Code Playgroud)
赋值语句(即.class.name = "Name")不是可调用的,因此它不起作用.使用setattr执行像这样的分配
self.assertRaises(NameError, setattr, myclass, "name", "Name")
Run Code Online (Sandbox Code Playgroud)
此外,您无法分配,class因为它是一个关键字.
| 归档时间: |
|
| 查看次数: |
4340 次 |
| 最近记录: |