assertRaises im Python-Unit-Test fängt die Ausnahme nicht ab [duplicate]

Diese Frage hat hier bereits eine Antwort:

Wie testen Sie, ob eine Python-Funktion eine Ausnahme auslöst? 11 Antworten

Kann mir jemand sagen, warum der folgende Unit-Test auf dem ValueError in test_bad fehlschlägt, anstatt ihn mit assertRaises abzufangen und erfolgreich zu sein? Ich denke, ich verwende die richtige Prozedur und Syntax, aber der ValueError wird nicht abgefangen.

Ich benutze Python 2.7.5 auf einer Linux-Box.

Hier ist der Code ...

import unittest

class IsOne(object):
    def __init__(self):
        pass
    def is_one(self, i):
        if (i != 1):
            raise ValueError

class IsOne_test(unittest.TestCase):

    def setUp(self):
        self.isone = IsOne()

    def test_good(self):
        self.isone.is_one(1)
        self.assertTrue(True)

    def test_bad(self):
        self.assertRaises(ValueError, self.isone.is_one(2))

if __name__ == "__main__":
    unittest.main()

und hier ist die Ausgabe des Unit-Tests:

======================================================================
ERROR: test_bad (__main__.IsOne_test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test/raises.py", line 20, in test_bad
    self.assertRaises(ValueError, self.isone.is_one(2))
  File "test/raises.py", line 8, in is_one
    raise ValueError
ValueError

----------------------------------------------------------------------
Ran 2 tests in 0.008s

FAILED (errors=1)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage