【问题标题】:assertRaises in python unit-test not catching the exception [duplicate]python单元测试中的assertRaises没有捕获异常[重复]
【发布时间】:2014-09-22 17:03:33
【问题描述】:

谁能告诉我为什么下面的单元测试在 test_bad 中的 ValueError,而不是用 assertRaises 捕获它 并成功?我想我使用了正确的程序和语法, 但 ValueError 没有被捕获。

我在 linux 机器上使用 Python 2.7.5。

这是代码……

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)

【问题讨论】:

    标签: python unit-testing assertraises


    【解决方案1】:

    Unittest 的 assertRaises 接受一个可调用对象和参数,所以在你的情况下,你可以这样称呼它:

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

    如果您愿意,从 Python2.7 开始,您还可以将其用作上下文管理器,例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-19
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      相关资源
      最近更新 更多