如何使用assertRaises在Python中测试实例方法?

时间:2013-01-07 15:44:10

标签: python unit-testing assertraises

我理解如何在函数或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不会像第一个调用那样传递,就像调用实例方法时一样。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:8)

正如其他答案所说,您必须单独传递值,但您可能更容易阅读的替代方法是使用with语句:

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

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

答案 1 :(得分:4)

我认为正在提供self,但assertRaises期望您单独列出参数。尝试:

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

答案 2 :(得分:1)

您必须以这种方式传递值:

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