chr*_*ley 29 python unit-testing assert
我正在写测试,我听到有人说要使用self.assertFalse而不是assert False.为什么这样,有什么好处?
unu*_*tbu 38
如果你跑
import unittest
class Test_Unittest(unittest.TestCase):
    def test_assert(self):
        assert False
    def test_assertFalse(self):
        self.assertFalse(True)
if __name__ == '__main__':
    unittest.main()
您获得相同的日志信息,同样的失败:
FF
======================================================================
FAIL: test_assert (__main__.Test_Unittest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/unutbu/pybin/test.py", line 6, in test_assert
    assert False
AssertionError
======================================================================
FAIL: test_assertFalse (__main__.Test_Unittest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/unutbu/pybin/test.py", line 8, in test_assertFalse
    self.assertFalse(True)
AssertionError
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (failures=2)
两者处理相同的原因是因为unittest.TestCase定义
failureException = AssertionError
当你说assert FalseAssertionError被引发时.
当你说self.assertFalse(True),a failureExeception被提出.
由于这些例外是相同的,因此没有明显的区别.
assert并且self.assertFalse不要在常规用法然而不同.
assert用于声明某个条件应该保存在代码中的某个点.它在开发过程中用作拐杖,但不能用于生产代码.如果运行python -O my_unittest.py,则忽略所有断言语句.这会破坏你的预期用途assert,即使在出现故障时也可能使你的单元测试通过.
即使(没有-O标志)结果相同,assert也不应在单元测试代码中使用.使用self.assertTrue或self.assertFalse在编写单元测试时.
S.L*_*ott 28
assert False抛出一个没有有用的日志信息的异常.测试有错误.
self.assertFalse() 使用测试失败信息(如消息和测试名称)抛出测试失败异常.
错误 - 测试甚至无法运行 - 和失败之间存在差异 - 测试代码工作但产生了错误的答案.
错误是代码的严重问题.
失败只是需要修复的失败.
as.*_*as. 10
到目前为止,答案中有一点没有提到,有几个测试框架(例如py.test和nose)使用python的内省魔术来允许你编写单元测试,如下所示:
# test_this_and_that.py
def test_frobber():
    assert frobber('x') == 'y'
# EOF
不需要您在上面看到的任何单元测试样板.所以在某些情况下,它可以归结为一个框架/风格问题.
| 归档时间: | 
 | 
| 查看次数: | 24692 次 | 
| 最近记录: |