Есть ли способ заставить носовой модуль Python работать одинаково в __main__ и в командной строке?

Я не знаю, как заставить работать обработчик __main__ носового модуля. У меня есть это в конце моего тестового модуля:

if __name__ == "__main__":
    import nose
    nose.main()

Что дает мне:

----------------------------------------------------------------------
Ran 0 tests in 0.002s

OK

но если я запускаю то же самое через командную строку, он находит тесты и выполняет их:

MacBook-Pro:Storage_t meloam$nosetests FileManager_t.py 
............E..
======================================================================
ERROR: testStageOutMgrWrapperRealCopy (WMCore_t.Storage_t.FileManager_t.TestFileManager)
----------------------------------------------------------------------

СНИП

----------------------------------------------------------------------
Ran 15 tests in 0.082s

FAILED (errors=1)

Я играю с передачей различных аргументов в метод nose.main(), но не могу найти ничего, что работало бы. Я упускаю что-то действительно очевидное?

Спасибо


person PerilousApricot    schedule 01.07.2010    source источник


Ответы (4)


Ради потомков, это то, что я использую:

if __name__ == '__main__':
    import nose
    nose.run(argv=[__file__, '--with-doctest', '-vv'])

--with-doctests также будет выполнять ваши doctests в том же файле.

person Daniel Werner    schedule 23.08.2012
comment
Как ни странно, я не могу просто запустить это из Aquamacs. Aquamacs не устанавливает переменную file для временного файла, в который он записывает буфер. - person Charles Merriam; 28.10.2013
comment
Дать носу имя файла — это умно. Я получал странные ошибки, как будто он пытался интерпретировать функцию, в которой он находился, как имя модуля. - person Brian Peterson; 08.08.2014
comment
Это кажется функционально эквивалентным nose.runmodule(argv=[ 'nose', '--with-doctest', '-vv']) - person MarkHu; 03.09.2015

nose.runmodule — это путь:

if __name__ == '__main__':
    import nose
    nose.runmodule() 
person Vincent    schedule 20.03.2015

Я рекомендую проверить 2 вещи:

Убедитесь, что ваши исходные ФАЙЛЫ соответствуют соответствующему соглашению об именах: -ubuntu/1457852#1457852">ответ).

Мне, например, пришлось добавлять «_Test» ко всем моим исходным файлам. Затем все, что вам нужно, это этот аргумент (при условии, что ваш main находится в корне тестов):

nose.main(defaultTest="")

Я пробовал с:

nose.run(defaultTest=__name__)

как предполагал предыдущий ответ, но по какой-то причине это не сработало для меня. Я должен был сделать ОБЕ вещи, чтобы заставить его работать!

Надеюсь, поможет.

РЕДАКТИРОВАТЬ: Кстати, вызов с

 nose.run() 

or

 nose.main()

также не было заметной разницы.

person dgrandes    schedule 21.11.2011

Вам нужно использовать nose.core.TestProgram напрямую, передав ему поддельные аргументы командной строки. В этом я не уверен, если найдут ваши тесты из того же модуля, который вы используете

person Nailor    schedule 18.08.2010