tox下的测试不一定使用已安装的代码

时间:2014-04-20 19:46:40

标签: python tox

tox website上列出的第一个功能是"使用不同的Python版本和解释器"检查您的软件包安装是否正确。这让我觉得,如果我搞砸了我的setup.py,那测试就不会通过,而且我会收到关于我的setup.py已经坏了的事实的提醒。

事实并非如此。事实上,如果您遵循将模块或包放在与tox.ini相同的目录中的常规模式,则代码将从本地目录(aka {toxinidir})导入。这意味着你可以让你的setup.py绝对没有任何东西,tox会告诉你它的罚款。在那时,在你推到pypi并尝试使用之前,很容易就不会注意到这个问题。这是我想要防止的问题。

主要问题是在测试期间,空字符串出现在sys.path上。 Python将此解释为当前工作目录并从那里导入。

有没有办法配置tox,以便在测试期间不使用本地目录?

目前我的解决方法是cd {envtmpdir} && coverage run && mv .coverage {toxinidir},但这显然是一个丑陋的黑客。

这里我提供了两个版本的代码:

我的目标是找到一个避免上述问题的tox配置,并且足够合理,建议在所有项目中使用。

1 个答案:

答案 0 :(得分:1)

我注意到nosetests在运行期间修改了sys.path:它在一开始就将检出的代码添加到其中。这基本上打破了tox试图创造的分离。要解决此问题,您只需将-P标记附加到nosetests

[tox]
envlist = py27

[testenv]
commands=
    nosetests -P tests
deps=
    nose
    -rrequirements.txt

另外,我必须附加tests(指向tests/目录)以防止import任何非测试代码(我正在使用C扩展名)可能会或可能不会在结账时建立。)