有没有办法让python的鼻子模块在__main__和命令行中工作相同?

时间:2010-07-01 18:21:11

标签: python nose nosetests

我不确定如何让nose模块的__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)
----------------------------------------------------------------------

SNIP

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

FAILED (errors=1)

我一直在玩将不同的参数传递给nose.main(),但我找不到任何有用的东西。我错过了一些非常明显的东西吗?

由于

5 个答案:

答案 0 :(得分:9)

为了后人的缘故,这就是我使用的:

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

--with-doctests也会在同一个文件中执行您的doctests。

答案 1 :(得分:7)

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

答案 2 :(得分:6)

nose.runmodule是要走的路:

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

答案 3 :(得分:1)

我建议检查两件事:

确保您的来源 FILES 遵循相应的命名惯例:(详见answer)。

例如,我必须将“_Test”附加到我的所有源文件中。 然后,您只需要这个参数(假设您的主要位于测试的根部):

nose.main(defaultTest="")

我尝试过:

nose.run(defaultTest=__name__)

作为先前的回答建议,但由于某种原因它不适合我。我不得不做两件事才能让它发挥作用!

希望它有所帮助。

编辑: 顺便说一下,用

打电话
 nose.run() 

 nose.main()

也没有明显的区别。

答案 4 :(得分:0)

您需要通过传递伪命令行参数直接使用nose.core.TestProgram。我不确定如果从你正在使用的模块中找到你的测试