Подтвердить что ты не робот

Есть ли способ заставить модуль носа 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)

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

Спасибо

4b9b3361

Ответ 1

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

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

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

Ответ 2

if __name__ == '__main__':
    import nose
    nose.run(defaultTest=__name__)

Ответ 3

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

if __name__ == '__main__':
    import nose
    nose.runmodule() 

Ответ 4

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

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

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

nose.main(defaultTest="")

Я пробовал:

nose.run(defaultTest=__name__)

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

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

EDIT: Кстати, вызов с помощью

 nose.run() 

или

 nose.main()

не было различимых различий.

Ответ 5

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