assertRaises en python unit-test no detecta la excepción

¿Alguien puede decirme por qué la siguiente prueba de unidad está fallando en el ValueError en test_bad, en lugar de atraparla con assertRaises y tener éxito? Creo que estoy usando el procedimiento y la syntax correctos, pero el ValueError no está siendo atrapado.

Estoy usando Python 2.7.5 en una caja de Linux.

Aquí está el código …

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() 

Y aquí está la salida de la prueba de la unidad:

 ====================================================================== 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) 

El assertRaises de Unittest toma un nombre y argumentos, por lo que en su caso, lo llamaría así:

 self.assertRaises(ValueError, self.isone.is_one, 2) 

Si lo prefiere, a partir de Python2.7, también podría usarlo como un administrador de contexto como:

 with self.assertRaises(ValueError): self.isone.is_one(2)