Нос не может найти тесты в ubuntu

Есть ли причина, по которой Нос не сможет найти тесты в Ubuntu 9.04?

Я использую нос 0.11.1 с python 2.5.4.
Я могу запускать тесты только в том случае, если я явно указываю имя файла. Если я не укажу имя файла, он просто говорит: 0 тестов.

Тот же проект отлично работает на моем Mac, поэтому я совершенно не в сети!

Ответ 1

Что-то связанное, если вы запускаете тесты из каталога i.e

nosetests ... tests/

где тесты - это имя папки с моими тестами и имеют отдельные функции тестирования python в одном из .py-модулей... Ваши функции должны начинаться с "теста", чтобы носетисты узнали, что в качестве теста вы хотите бежать.

например:

 def test_something():
    ...

nosetests будут запускать эту функцию при выполнении в этом каталоге, а

 def somethin_to_test():
    ...

не будет.

Ответ 2

Другая вещь, которая всегда получает меня с nose, заключается в том, что она не будет запускать тесты в исполняемых файлах. Я не совсем уверен, почему это повлияет на Mac/Ubuntu, но это стоит того.

Убедитесь, что сценарии каким-то образом не получили chmod +x 'd на Mac... И если они это сделали, исправьте их с помощью chmod -x $(find tests/ -name '*.py').

Ответ 3

Такое поведение почти наверняка связано с тем, что ваши файлы не указаны в соответствии с поведением проверки соответствия носа. Из носовые документы:

нос автоматически собирает тесты из исходных файлов, каталогов и пакетов python, найденных в его рабочем каталоге (который по умолчанию относится к текущему рабочему каталогу). Любой исходный файл, каталог или пакет python, который соответствует регулярному выражению testMatch (по умолчанию: (?: ^ | [b_.-]) [Tt] est) будет собираться как тест (или источник для сбора тестов).

Акцент был мой.

Некоторые имена примеров, которые будут соответствовать:

  • TestFoo.py
  • Foo-Test.py
  • Foo_Test.py
  • Foo.Test.py(обратите внимание, что этот будет пытаться импортировать Foo и будет вызывать исключение, если он не может)

Имя, похожее на совпадение, но на самом деле не:

  • FooTest.py

Если вы просто переименуете свои файлы, вам должно быть хорошо идти.


Обновить. Вы читали это сообщение в блоге? Я не смог рассказать по деталям, которые вы опубликовали, но, возможно, в ваших тестовых каталогах отсутствуют файлы __init__.py?

... убедитесь, что ваши "тестовые" каталоги на самом деле являются модулями (у них есть пустой файл __init__.py).

Ответ 4

У меня была та же проблема. Мои тесты проходили отлично в Windows, но не в Ubuntu.

В Ubuntu, если вы запустите:

nosetests -vv --collect-only

Вероятно, вы увидите, что он пропускает ваш тестовый файл, потому что он является исполняемым: _Tools/LintControlFiles/test_HgLint.py является исполняемым; пропущено

Чтобы получить нос для рассмотрения исполняемых файлов, запустите его следующим образом:

nosetests --exe

Ответ 5

Я могу подтвердить, что, как сказал @david-wolever, они не могут быть исполняемыми на Ubuntu. Run

nosetests -vv --collect-only 

чтобы просмотреть полную информацию о том, какие файлы были просмотрены.

Ответ 6

После просмотра источника носа, в частности файла selector.py, если вы посмотрите, что происходит,

https://github.com/nose-devs/nose/blob/master/nose/selector.py#L129

При проверке, если мы wantFile, вызывается self.matches, который затем выполняет поиск regex против match, который вы бы прошли в качестве testMatch.

Проблема возникает, когда вы затем проверяете позже (и, в этом файле),

https://github.com/nose-devs/nose/blob/master/nose/selector.py#L152

Повторяется тот же тип проверок, что и wantFunction.

Это означает, что если у вас есть другая структура для вашего пакета, ваш файл pyfile и ваш фактический класс/функция теста, вам нужно создать сумасшедшее сложное регулярное выражение, чтобы соответствовать этому на каждом этапе.

Для меня, когда я узнал об этом, я решил префикс моих пакетов, контейнеров и тестовых функций с общим битом, т.е.

setests ├── __init__.py ├── setest_area1.py └──── def setest_someblock(): ...

И тогда моя команда nose работает, как,

nose --testMatch="setest"

Затем это фильтрует, как я ожидаю, что он будет работать.

Ответ 7

Используйте -all-modules, и он найдет все тесты.

nosetests --all-modules ./tests