Я хочу запустить do c -test для скрипта Python как часть хука предварительной фиксации в Python.
В файле set_prefix.py
у меня есть do c -тесты перед функциями, которые я тестирую перед запуском:
import doctest
import sys
EXTENSIONS = tuple([".%s" % ending for ending in ["jpg", "heic", "nrw"]])
def is_target_for_renaming(filepath):
"""Returns true if this filepath should be renamed.
>>> is_target_for_renaming("/Users/username/Pictures/document.other_jpg")
True
"""
return filepath.lower().endswith(EXTENSIONS)
def get_failed_tests():
r = doctest.testmod()
return r.failed
def main():
pass
if "__main__" == __name__:
args = sys.argv
test_only = 2 <= len(sys.argv) and "test" == sys.argv[1]
test_failures = get_failed_tests()
print(test_failures)
assert 0 == test_failures
if not test_only:
main()
Когда я запускаю python3 set_prefix.py test
, я получаю ожидаемую ошибку.
Тем не менее, когда я импортирую модуль и вызов функции:
import set_prefix
if "__main__" == __name__:
test_failures = set_prefix.get_failed_tests()
print(test_failures)
Я получаю 0 сбоев:
$ python3 temp.py
0
Причина, по которой я хочу импортировать модуль, состоит в том, чтобы запускать тесты в хуке предварительной фиксации, аналогичном добавлено flake8
:
#!/usr/local/opt/python/bin/python3.7
import sys
from flake8.main import git
if __name__ == '__main__':
sys.exit(
git.hook(
strict=git.config_for('strict'),
lazy=git.config_for('lazy'),
)
)
Почему тесты do c запускаются при вызове из командной строки и сценария, а не при импорте сценария? Будет ли unittest
лучшей платформой, как описано в этой теме ?