Пакет nose
часто используется для запуска doctests, а также тесты в специальных тестовых файлах. Похоже, что даже в файлах doctest он пытается запустить фикстуры setup
и teardown
.
Когда модулю для тестирования документации требуется функция с именем setup
для какой-то другой цели, это может быть расширение Sphinx, например: Nosetests вызовет setup
и завершится ошибкой.
Чтобы было понятно, вот пример:
def my_tricky_function(arg):
"""Do something testable
>>> my_tricky_function(1)
2
"""
return arg + arg
def my_extension(app):
...
def setup(app):
"""Establish sphinx hooks"""
app.connect('build-finished', my_extension)
Запуск nosestests
приводит к:
File ".../site-packages/nose/suite.py", line 291, in setUp
self.setupContext(ancestor)
File ".../site-packages/nose/suite.py", line 314, in setupContext
try_run(context, names)
File ".../site-packages/nose/util.py", line 468, in try_run
return func(obj)
File "sphinx_ext.py", line 14, in setup
app.connect('build-finished', my_extension)
AttributeError: 'module' object has no attribute 'connect'
(Примечание: когда setup
принимает аргумент, Nousetest проходит область, в которой setup
является именем, в данном случае модулем.)
Обратите внимание, что следующее не (кажется) применимо:
- добавление атрибута
__test__ = False
(или использование этот декоратор) наsetup
не останавливает его вызов. - нет параметра командной строки, эквивалентного
--ignore-files
- настройка
my_tricky_function.setup = None
не останавливает настройку на уровне модуля (h/t @alecxe)
my_tricky_function.setup = None
? - person alecxe   schedule 20.05.2014