cle*_*ine 5 python unit-testing assertraises
我理解如何assertRaises在函数或lambda上使用,但我想在实例方法上使用它.
因此,例如,如果我有一个calculator执行无限精度算术的类,我可能会编写测试:
def setUp(self):
self.calculator = calculator.calculator()
def test_add(self):
self.assertRaises(TypeError, self.calculator.add, ['hello', 4])
Run Code Online (Sandbox Code Playgroud)
因为self.calculator.add是可调用的并且['hello', 4]是我想传递它的参数,但是,当我运行测试时,我得到以下致命错误:
TypeError: add() missing 1 required positional argument: 'num2'
Run Code Online (Sandbox Code Playgroud)
我相信它会抛出这个错误,因为在self.assertRaises调用时self.calculator.add,self并没有像第一个调用那样传递,就像调用实例方法时一样.我该如何解决?
正如其他答案所说,您必须单独传递值,但您可能更容易阅读的替代方法是使用以下with语句:
def test_add(self):
with self.assertRaises(TypeError):
self.calculator.add('hello', 4)
Run Code Online (Sandbox Code Playgroud)
当您使用assertRaises这种方式时,您只需在with块内正常编写代码.这意味着它是一种更自然的编码方式,而且您不仅限于测试单个函数调用.
我认为self正在提供,但assertRaises希望您单独列出参数。尝试:
self.assertRaises(TypeError, self.calculator.add, 'hello', 4)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1637 次 |
| 最近记录: |