Мне очень нравится pytest и особенно его способность просто запускать unittest тесты просто отлично. Тем не менее, у меня есть некоторые хаки, связанные с юнит-тестами, которые я не знаю, как воспроизвести с помощью pytest, поэтому я пока не могу написать полные тесты только для pytest.
Лучше всего показывать, а не объяснять.
import unittest
import sys
def active():
print("active")
def f_default():
print("inactive")
class Test(unittest.TestCase):
def test_it(self):
print("passed")
if __name__ == '__main__':
flag = "--systrace"
if flag in sys.argv:
f_default = active
sys.argv.remove(flag)
f_default()
unittest.main()
Обычно, если передать в командной строке --systrace
, я перехватываю его, переворачиваю в тестовом скрипте какое-то состояние, которое необязательно передается тестам юнитов, а затем удаляю его из sys.argv
. unittest не имеет смысла.
с переключателем:
python test_unittest_commandline.py --systrace
active
passed
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
без переключателя:
$ python test_unittest_commandline.py
inactive
passed
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
pytest не впечатлен
Это следовало ожидать, так как я не на __main__
, поэтому я никогда не убираю неожиданный аргумент. Есть ли ловушка pytest, которую я могу использовать, чтобы вычистить sys.argv и отметить значение аргумента? Опять же, я не хочу параметризировать тесты или сам pytest. Мне никогда не повезло с nose в качестве тестового бегуна, но это не вносит собственных улучшений в тесты юнитов.
pytest test_unittest_commandline.py --systrace
ERROR: usage: pytest [options] [file_or_dir] [file_or_dir] [...]
pytest: error: unrecognized arguments: --systrace
inifile: None
rootdir: /explore