Как запустить тесты с помощью `unittest`?

Для запуска тестов с помощью unittest есть несколько способов:
  • Из командной строки: python -m unittest test_module.py (для конкретного модуля) или python -m unittest discover -s test_directory -p "*_test.py" (для поиска тестов в директории).
  • Внутри Python кода:
    import unittest
    
    if __name__ == '__main__':
        unittest.main()
    
Важно, чтобы имена тестовых классов начинались с Test, а тестовые методы - с test_.

Для запуска тестов с помощью `unittest` в Python есть несколько способов:
  1. Использование командной строки: Самый распространенный способ - это запуск тестов из командной строки. Для этого используется модуль `unittest` и его discovery functionality.
    Пример:
    python -m unittest discover -s test_directory -p "test_*.py"

    Где:
    • `python -m unittest` - вызывает модуль unittest.
    • `discover` - указывает, что нужно использовать механизм автоматического обнаружения тестов.
    • `-s test_directory` - (необязательно) указывает директорию, в которой искать тестовые файлы (по умолчанию текущая директория).
    • `-p "test_*.py"` - (необязательно) задает шаблон имени тестовых файлов (по умолчанию "test*.py").
    • `-t top_level_directory` - (необязательно) указывает top-level directory для проекта (для импортов, если они relative).

    Если у вас есть один тестовый файл, можно указать его напрямую:
    python -m unittest test_module.py
  2. Запуск тестов из кода Python: Вы также можете запустить тесты непосредственно из Python скрипта.
    Пример:
    
    import unittest
    
    if __name__ == '__main__':
        unittest.main()
          
    Этот код запустит все тесты, найденные в текущем модуле, если он запущен как скрипт (например, `python my_test_file.py`). Можно также использовать `unittest.main()` с различными аргументами для настройки поведения. Например, `argv=['first-arg-is-ignored'], exit=False` полезно, если `unittest.main()` вызывается в интерактивной сессии, чтобы предотвратить завершение сессии.
  3. Использование `unittest.TestSuite` и `unittest.TextTestRunner`: Более гибкий способ - это создать `TestSuite`, добавить в него нужные тесты и запустить их с помощью `TextTestRunner`.
    Пример:
    
    import unittest
    
    def suite():
        suite = unittest.TestSuite()
        suite.addTest(MyTestCase('test_method_one'))
        suite.addTest(MyTestCase('test_method_two'))
        return suite
    
    if __name__ == '__main__':
        runner = unittest.TextTestRunner()
        runner.run(suite())
          
    Этот способ позволяет более тонко контролировать, какие тесты будут запущены. Также можно использовать `TestLoader` для автоматического поиска тестов и добавления их в `TestSuite`.
Важно:
  • Тестовые классы должны наследоваться от `unittest.TestCase`.
  • Тестовые методы должны начинаться с префикса `test_`.
  • Обычно тестовые файлы называют, например, `test_my_module.py` и кладут их в директорию `tests/`.
Выбор метода запуска зависит от конкретной задачи и предпочтений разработчика. Командная строка наиболее удобна для быстрых запусков всех тестов, в то время как программный запуск дает больше гибкости в настройке.
0