Нос не может найти тесты в 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 и будет вызывать исключение, если он не может)
Имя, похожее на совпадение, но на самом деле не:
Если вы просто переименуете свои файлы, вам должно быть хорошо идти.
Обновить. Вы читали это сообщение в блоге? Я не смог рассказать по деталям, которые вы опубликовали, но, возможно, в ваших тестовых каталогах отсутствуют файлы __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