assertRaises 不捕获异常/不抱怨没有异常
assertRaises does not catch exception / does not complain about no exception
此代码未按预期工作。期望失败时我却通过了;并在期望通过 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_db
或 python test_db.py
您正在调用方法 self.close_database
,而您本应传递对它的引用。删除括号,例如
def test_close(self):
self.assertRaises(ReferenceError, self.close_database)
查看 the docs 了解更多详情。
去掉self.close_database
后面的括号:
class TestConnectDatabase(unittest.TestCase):
def test_close(self):
self.assertRaises(ReferenceError, self.close_database)
pass
您正在调用 self.close_database
,这意味着它的结果 (None
) 被传递给 assertRaises
。请参阅 assertRaises
.
的文档
此代码未按预期工作。期望失败时我却通过了;并在期望通过 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_db
或 python test_db.py
您正在调用方法 self.close_database
,而您本应传递对它的引用。删除括号,例如
def test_close(self):
self.assertRaises(ReferenceError, self.close_database)
查看 the docs 了解更多详情。
去掉self.close_database
后面的括号:
class TestConnectDatabase(unittest.TestCase):
def test_close(self):
self.assertRaises(ReferenceError, self.close_database)
pass
您正在调用 self.close_database
,这意味着它的结果 (None
) 被传递给 assertRaises
。请参阅 assertRaises
.