5

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

因此,例如,如果我有一个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.addself并没有像调用实例方法时那样作为第一个参数传递。我该如何解决?

4

3 回答 3

8

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

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

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

于 2013-01-07T15:52:11.870 回答
5

我认为这self是提供的,但assertRaises希望您单独列出参数。尝试:

self.assertRaises(TypeError, self.calculator.add, 'hello', 4)
于 2013-01-07T15:45:51.330 回答
1

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

self.assertRaises(TypeError, self.calculator.add, arg1, arg2, arg3)
于 2013-01-07T15:45:41.710 回答