【问题标题】:tests under tox don't necessarily use the installed codetox下的测试不一定使用安装的代码
【发布时间】:2014-08-08 15:56:59
【问题描述】:

tox website 中列出的第一个功能是“使用不同的 Python 版本和解释器检查您的包是否正确安装”。这让我觉得如果我搞砸了我的 setup.py,测试将不会通过,我会收到我的 setup.py 变坏的警报。

事实并非如此。事实上,如果您按照通常的模式将模块或包放在与 tox.ini 相同的目录中,则代码是从本地目录(又名 {toxinidir})导入的。这意味着你可以让你的 setup.py 绝对不做任何事情,并且 tox 会告诉你它很好。那时,很容易直到你推送到 pypi 并尝试使用它之后才注意到问题。这是我希望 tox 预防的问题。

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

有没有办法配置 tox 使得测试期间不使用本地目录?

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

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

我的目标是找到一个避免上述问题的tox配置,并且足够合理,可以推荐用于所有项目。

【问题讨论】:

    标签: python tox


    【解决方案1】:

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

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

    另外,我必须附加tests(将鼻子指向tests/ 目录)以防止鼻子importing 任何非测试代码(我使用的C 扩展可能是也可能不是内置在结帐中)。

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 2016-10-11
      • 2023-01-18
      • 2018-03-18
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多