Кто-нибудь знает, как nosetest -m, -i и -e работают?

Я пытаюсь получить nosetests для определения моих тестов, но он не выполняет никаких моих тестов.

У меня есть следующая файловая структура

Project
    +----Foo/
          +----__init__.py
          +----bar.py
    +----test/
          +----__init__.py
          +----unit/
                +----__init__.py
                +----bar_test.py
          +----functional/
                +----__init__.py
                +----foo_test.py

Внутри bar_test.py

class BarTest(unittest.TestCase):
     def bar_1_test():
         ...

Внутри foo_test.py

class FooFTest.py
     def foo_1_test():
         ...

Использование -m, -i, -e опций nosetests

  • Какое регулярное выражение мне нужно для запуска только модульных тестов (в разделе unit/, тесты в классе BarTest)
  • Что такое регулярное выражение, мне нужно запустить только функциональные тесты (по функциям /, тесты в классе FooFTest)

Я пробовал различные комбинации и, похоже, не мог заставить носететы делать то, что хочу последовательно

Ответ 1

Самый простой способ запускать только тесты под Project/test/unit - это использовать --where. Например:

nosetests --where=Project/test/unit

Затем используйте --match (-m) или --exclude (-e), чтобы уточнить список, если это необходимо.

Если вы все еще хотите использовать селектора регулярных выражений, вы, вероятно, можете сделать это так (не тестировалось):

nosetests --match='^Foo[\b_\./-])[Tt]est'

Выполнение этого script из каталога Project будет запускать все тесты, начинающиеся с "Foo" и заканчивающиеся на "[Tt] est".

Как правило, вы, вероятно, захотите использовать либо --match, либо --exclude, но не оба. Эти параметры определяют шаблон совпадающих имен функций. Вы можете уточнить один из них, используя --ignore-files, который, естественно, позволяет игнорировать целые файлы.

Ответ 2

Учитывая вашу структуру каталогов, вы можете легко выполнять сегменты тестов с помощью опции -exclude.

Запустить все тесты:

nosetests Project

Пробные модульные тесты:

nosetests Project -e functional

Запустить функциональные тесты:

nosetests Project -e unit

Если у вас более сложные требования к исполнению теста, я бы рекомендовал маркировать тесты и использовать пакет атрибутов.