繁体   English   中英

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

[英]tests under tox don't necessarily use the installed code

tox网站上列出的第一个功能是“使用不同的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配置,并且足够合理,建议在所有项目中使用。

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

[tox]
envlist = py27

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

此外,我不得不附加tests (指向tests/目录的鼻子)以防止鼻子import任何非测试代码(我使用的C扩展可能会或可能不会在结帐中构建)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM