在Python测试脚本中将选项传递给nose

在Python测试脚本中将选项传递给nose,python,nose,Python,Nose,我不是从命令行运行nose测试,而是使用一个测试运行程序为所有测试设置一些内容,包括连接到MongoDB的本地测试实例。nose的文档似乎只说明如何通过位于主目录中的命令行或配置文件传递选项。是否有一种方法可以传递选项,例如在使用脚本运行测试时使用xunit?如下所示: import nose argv = ['fake', '--with-xunit'] nose.main(argv=argv) 必须添加“fake”参数来代替可执行文件名,如dbw的回答中所述。Nose对第一个参数做了一些

我不是从命令行运行nose测试,而是使用一个测试运行程序为所有测试设置一些内容,包括连接到MongoDB的本地测试实例。nose的文档似乎只说明如何通过位于主目录中的命令行或配置文件传递选项。是否有一种方法可以传递选项,例如在使用脚本运行测试时使用xunit?

如下所示:

import nose

argv = ['fake', '--with-xunit']
nose.main(argv=argv)

必须添加“fake”参数来代替可执行文件名,如dbw的回答中所述。

Nose对第一个参数做了一些鬼鬼祟祟的事情,因此它不会被解析。我的鼻套是这样做的:

import nose
import sys

argv = sys.argv[:]
argv.insert(1, "--with-xunit")
nose.main(argv=argv)

作为奖励,这允许程序的客户端使用Nose参数来控制其行为

@Matt:你确定吗?因为我在我的一个项目中使用了相同的代码片段,我现在刚刚更改为生成一个
xunit
报告,它是在
nosetests.xml
下成功生成的!?也许我遗漏了什么……是的,我先尝试了一下,但没有生成报告。试过命令行,我得到了一个。抱歉:-/I使用
nose.core.run()
以编程方式运行nose。不确定与
main()
有什么区别。我想我知道为什么这不起作用。Nose不使用argv的第一个参数来配置自身。这可能也会导致并行执行出现问题?argv=['fake_executable_name','--with xunit']将解决这个问题。我相信这是更正确的答案。关于Nose在第一个参数中偷偷摸摸的一点是非常重要的。Nose不是偷偷摸摸的:)重点是
argv
列表总是以可执行文件的名称开头。因此,当您说
argv=['--with xunit']
时,您将可执行文件的名称设置为
--with xunit
,并且不传递任何参数。要解决这个问题,请使用
argv=['fake','--with xunit']
我想这是我的隐含观点,感谢您明确地指出这一点。第一个“论据”用于说明帮助是否正确打印,等等。