tox website 上列出的第一个功能是“使用不同的 Python 版本和解释器检查你的包是否正确安装”。这让我觉得如果我搞砸了我的 setup.py,测试将不会通过,并且我会被提醒我的 setup.py 已经变坏了。
事实并非如此。事实上,如果您按照通常的模式将您的模块或包放在与您的 tox.ini 相同的目录中,那么代码是从本地目录(又名 {toxinidir})导入的。这意味着你可以让你的 setup.py 什么都不做,tox 会告诉你它很好。在这一点上,很容易在你推送到 pypi 并尝试使用它之后才注意到这个问题。这是我希望避免出现的问题。
主要问题是空字符串在测试期间出现在 sys.path 上。 Python 将其解释为当前工作目录并从那里导入。
有什么方法可以配置 tox,使本地目录在测试期间不被使用?
目前我的解决方法是 cd {envtmpdir} && coverage run && mv .coverage {toxinidir}
,但这显然是一个丑陋的 hack。
这里我提供两个版本的代码:
我的目标是找到一个 tox 配置,避免上述问题,并且足够合理,推荐在所有项目中使用。
最佳答案
我注意到 nosetests
在其运行期间修改了 sys.path
:它在一开始就将 check out 的代码添加到其中。这实质上打破了毒素试图创造的分离。要解决此问题,您只需将 -P
标志附加到 nosetests
:
[tox]
envlist = py27
[testenv]
commands=
nosetests -P tests
deps=
nose
-rrequirements.txt
此外,我必须附加 tests
(将 nose 指向 tests/
目录)以防止 nose import
ing 任何非- 测试代码(我使用的 C 扩展可能会或可能不会在结帐时构建)。
关于python - tox 下的测试不一定使用已安装的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23186845/