Сообщить о случайном вызове модуля Python test case без `-m unittest` - PullRequest
0 голосов
/ 16 января 2020

Случайно я вызвал свои Python модульные тесты с помощью следующей команды:

coverage run -m tests.unit.Tokens

Это выполнило некоторый код и сообщило отчет о покрытии. Но на самом деле покрытие выглядело только как инициализация. Не было сообщений об ошибках и исключений.
enter image description here

После некоторого поиска и отладки я обнаружил, что пропустил имя пакета unittest между -m и моим модуль тестового набора. Таким образом, модуль «выполнено» не был unittest с параметром tests.unit.Tokens. Он непосредственно выполнил модуль объявления тестового набора.

Пример вызова:

coverage run -m tests.unit.Tokens

должен сообщить что-то вроде:

Module 'tests.unit.Tokens' needed to be loaded by Pythons `unittest`.
Use 'python3 -m unitest test.unit.Tokens'

Что я могу добавить / реализовать / перезаписать, поэтому при вызове модуля напрямую выдается сообщение об ошибке?

Я мог бы представить, что файл может выглядеть так, как мы используем в наших основных Python файлах :

if __name__ == "__main__":
  # this is the entry point

1 Ответ

1 голос
/ 16 января 2020

Модуль, запущенный через python -m, также выполняется в пространстве имен __main__. Таким образом, следующий код в (декларативном) модуле тестового набора может дать подсказку, как правильно выполнять тестовые случаи.

if __name__ == "__main__":
  print("ERROR: you called a testcase declaration file as an executable module.")
  print("Use: 'python -m unitest <testcase module>'")
...