Если вы запустите
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 False
, возникает ошибка AssertionError.
Когда вы говорите self.assertFalse(True)
, failureExeception
поднимается.
Поскольку эти исключения одинаковы, видимой разницы нет.
Однако
assert
и self.assertFalse
отличаются в обычном использовании.
assert
используется для объявления того, что определенное условие должно выполняться в определенной точке кода. Он используется в качестве опоры во время разработки, но не предназначен для использования в производственном коде. Если вы запускаете python -O my_unittest.py
, все операторы assert игнорируются. Это может подорвать ваше предполагаемое использование assert
, что может привести к прохождению ваших модульных тестов даже в случае сбоя.
Даже если (без флага -O) результат тот же, assert
не предназначен для использования в коде модульного теста. Используйте self.assertTrue
или self.assertFalse
при написании модульных тестов.