assertRaises没有捕获异常/不会抱怨没有异常

时间:2016-07-25 23:38:15

标签: python python-2.7 python-unittest

此代码无法按预期工作。期待失败时,我正在通过;期望assertRaises()传递时失败。

test_db.py:

import unittest

class TestConnectDatabase(unittest.TestCase):
    def test_close(self):
        self.assertRaises(ReferenceError, self.close_database()) # <--- Problem #1
        pass

    # Just a stub for brevity...
    def close_database(self):
        #raise Exception(ReferenceError)                         # <--- Problem #2
        pass

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

在此示例中,即使未引发异常,代码也会通过单元测试。如果取消注释#raise,则只会将异常传递给命令行,并且在应该通过时测试失败。

使用以下方法执行测试: python -m test_dbpython test_db.py

2 个答案:

答案 0 :(得分:1)

当您应该传递对它的引用时,您正在调用方法self.close_database。删除括号,例如

def test_close(self):
    self.assertRaises(ReferenceError, self.close_database)

查看the docs了解详情。

答案 1 :(得分:1)

删除self.close_database后的括号:

class TestConnectDatabase(unittest.TestCase):
    def test_close(self):
        self.assertRaises(ReferenceError, self.close_database)
        pass

您正在调用self.close_database,这意味着其结果(None)会传递给assertRaises。请参阅assertRaises的文档。