Есть ли способ заставить модуль носа Python работать одинаково в __main__ и в командной строке? - PullRequest
10 голосов
/ 01 июля 2010

Я не уверен, как заставить работать обработчик __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 (), но я не могу найти ничего, что работает. Я что-то упускаю действительно очевидное?

Спасибо

Ответы [ 5 ]

9 голосов
/ 23 августа 2012

Для потомков я использую вот что:

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

--with-doctests также выполнит ваши тесты в том же файле.

7 голосов
/ 05 ноября 2010
if __name__ == '__main__':
    import nose
    nose.run(defaultTest=__name__)
6 голосов
/ 20 марта 2015

nose.runmodule это путь:

if __name__ == '__main__':
    import nose
    nose.runmodule() 
1 голос
/ 21 ноября 2011

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

Убедитесь, что ваш Источник ФАЙЛЫ соблюдает соответствующее соглашение об именах: (подробно в этом ответе ).

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

nose.main(defaultTest="")

Я пытался с:

nose.run(defaultTest=__name__)

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

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

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

 nose.run() 

или

 nose.main()

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

0 голосов
/ 18 августа 2010

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

...