单元测试——如何使用assertRaises测试Python中的实例方法



我理解如何在函数或lambda上使用assertRaises,但我想在实例方法上使用它。

例如,如果我有一个类calculator做无限精度算术,我可以写测试:

def setUp(self):
    self.calculator = calculator.calculator()
def test_add(self):
    self.assertRaises(TypeError, self.calculator.add, ['hello', 4])

因为self.calculator.add是可调用的,['hello', 4]是我想通过它的参数,但是,当我运行测试时,我得到以下致命错误:

TypeError: add() missing 1 required positional argument: 'num2'

我相信它抛出这个错误,因为当self.assertRaises调用self.calculator.add时,self没有被传递为第一个参数,就像它通常是在调用实例方法时一样。我该如何解决这个问题?

正如其他答案所说,您必须分别传递值,但是您可能会发现更容易读取的替代方法是使用with语句:

def test_add(self):
    with self.assertRaises(TypeError):
        self.calculator.add('hello', 4)

当你以这种方式使用assertRaises时,你只是在with块内正常地编写代码。这意味着这是一种更自然的编码方式,而且您也不限于仅测试单个函数调用。

我认为提供了self,但assertRaises希望您单独列出参数。试一试:

self.assertRaises(TypeError, self.calculator.add, 'hello', 4)

必须这样传递值:

self.assertRaises(TypeError, self.calculator.add, arg1, arg2, arg3)

相关内容

  • 没有找到相关文章

最新更新