按Python版本制作“nosetests”脚本选择文件夹

按Python版本制作“nosetests”脚本选择文件夹,python,python-3.x,nose,Python,Python 3.x,Nose,我以前在我的setup.cfg文件中有这个: [nosetests] where=test_python_toolbox 但是现在我通过提供两个并行代码库来支持Python 2和Python 3,一个在source\u py2文件夹中,另一个在source\u py3文件夹中setup.py知道如何检查Python版本并选择正确的版本。问题是,我不知道如何进行nosetests,在repo根目录中调用时,选择正确的文件夹 我可以这样做: [nosetests] where=source_py2

我以前在我的
setup.cfg
文件中有这个:

[nosetests]
where=test_python_toolbox
但是现在我通过提供两个并行代码库来支持Python 2和Python 3,一个在
source\u py2
文件夹中,另一个在
source\u py3
文件夹中
setup.py
知道如何检查Python版本并选择正确的版本。问题是,我不知道如何进行
nosetests
,在repo根目录中调用时,选择正确的文件夹

我可以这样做:

[nosetests]
where=source_py2/test_python_toolbox
但是,测试只适用于Python2。我希望它们对两个版本都有效


我可以用一个标志启动
nosetests
,但我不愿意

可以通过多个环境规范和
changedir
选项来实现这一点(只需覆盖每个Python版本)。

使用
而不是不推荐使用的
where
,使用
tests
并指定多个测试:

[nosetests]
tests=source_py2/test_python_toolbox, source_py3/test_python_toolbox
这将运行这两组测试。对于每个测试,在特定于语言的特性就位之前,在最顶端添加运行测试的选择标准。例如,对于
source_py3
测试,添加:

import sys
from unittest import SkipTest

if sys.version_info < (3, 0):
    raise SkipTest("must use python 3.0 or greater")

针对每个测试模块。丑陋的方面是,你必须在每个测试用例中注入这些代码。

我更喜欢继续使用nose,而不是切换到不同的测试运行程序。然后你需要基于“-where”编写一个nose插件。好的,这是一个选项。但是,任何想运行我的测试的人都必须安装我的插件吗?或者,当用户在repo根目录下无参数运行
nosetests
时,它可以包含在repo中并自动使用吗?(假设用户没有安装我的插件。)这会不会使Wing尝试在两个文件夹中运行测试,从而在Python3上运行Python2测试时会出现许多异常?在这种情况下,您可能需要两个配置文件?如果您不希望出现异常,您也可以装饰您的测试并基于属性提供选择,但实际上您可能在两个版本中使用了不同的nosetests二进制文件,因此我认为两个配置文件没有问题。或者添加一个skipIf装饰器并对其进行条件设置,例如:
@unittest.skipIf(mylib.uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
有两个配置文件需要运行带有
nosetests
的标志,不是吗?我更喜欢对运行
nosetests
的人提出尽可能少的要求。关于在测试中加入选择逻辑:我考虑过这一点,但后来意识到一些Python 3文件甚至无法编译er Python 2,所以在选择逻辑启动之前,他们会提出一个
SyntaxError
。可能是在source_py2中放置一个配置文件,在source_py3中放置一个配置文件,并指定哪个配置文件与
-c
命令行一起使用?在任何情况下,您都必须为选择逻辑留出一些位置。这主要取决于您确定要进行哪些测试联合国;-)
[nosetests]
where=source_py2/test_python_toolbox
py3where=source_py3/test_python_toolbox
[nosetests]
where=source_py2/test_python_toolbox
py3where=source_py3/test_python_toolbox