Подтвердить что ты не робот

AssertRaises в модуле python не тестирует исключение

Может кто-нибудь сказать мне, почему следующий unit тест не работает на ValueError в test_bad, вместо того, чтобы ловить его с помощью assertRaises и успех? Я думаю, что я использую правильную процедуру и синтаксис, но ValueError не попадает.

Я использую Python 2.7.5 в окне linux.

Вот код...

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

и вот результат модульного теста:

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

Ответ 1

Unittest assertRaises принимает вызываемые вызовы и аргументы, поэтому в вашем случае вы бы назвали его следующим:

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

Если вы предпочитаете, с Python2.7, вы также можете использовать его в качестве менеджера контекста, например:

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