Python Unittest - assertRaises的意外用法?

Sah*_*and 1 python

我想知道是否有办法做到以下几点:

class Test_Vector_test(unittest.TestCase):
    def test_add(self):
        vector1 = Vector(2,2,2)
        scalar = 1
        self.assertRaises(NotImplementedError, vector1+scalar)
Run Code Online (Sandbox Code Playgroud)

此测试失败,出现以下错误代码:

Traceback (most recent call last):
  File "/Users/sahandz/Documents/School/Programmeringsteknik och Matlab/dd1315pylab3-master/test/test_Vector.py", line 14, in test_add
    self.assertRaises(NotImplementedError, vector1+scalar)
  File "/Users/sahandz/Documents/School/Programmeringsteknik och Matlab/dd1315pylab3-master/lab/Vector.py", line 17, in __add__
    raise NotImplementedError
NotImplementedError

----------------------------------------------------------------------
Ran 3 tests in 0.007s

FAILED (errors=1)
Run Code Online (Sandbox Code Playgroud)

即使你可以看到它实际上引起了错误.如何在使用方法的情况下达到所需的功能(检查是否vector1+scalar引发NotImplementedError)?vector1.__add__

syn*_*nym 5

assertRaises等待可调用的东西然后会引发错误.在函数执行之前vector1+scalar评估.使用函数,lambda或:assertRaiseswith

with self.assertRaises(SomeException):
    do_something()
Run Code Online (Sandbox Code Playgroud)

另请参阅文档.