Перевод статьи Understanding Python scope.
Рассмотрим функцию Python и модульный тест для неё. Что в ней неверно?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import unittest def method_under_test(callback, value): """Call callback with value.""" callback(value) class MyTestCase(unittest.TestCase): def test_function_calls_callback(self): callback_called = False def callback(actual): callback_called = True if actual != 42: raise AssertionError('wrong value!') method_under_test(callback, 42) self.assertTrue(callback_called) if __name__ == '__main__': unittest.main() |
Запустим тест:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ python test.py F ====================================================================== FAIL: test_function_calls_callback (__main__.MyTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "x.py", line 16, in test_function_calls_callback self.assertTrue(callback_called) AssertionError: False is not true ---------------------------------------------------------------------- Ran 1 test in 0.000s FAILED (failures=1) $ |
Выглядит так как будто функция callback
не вызвана. Проверим это: если изменить аргумент для callback
передаваемый в method_under_test()
, вы увидите что проверка в функции callback
срабатывает.
Разберёмся почему так происходит.