【问题标题】:Nose does not run tests鼻子不运行测试
【发布时间】:2015-08-21 15:07:33
【问题描述】:

假设你有一个名为 A 的 python 包,其目录结构如下

A
├── B.py
└── __init__.py

其中__init__.py 为空,B.py 的内容由下式给出

def test_B():
    assert False

在上面的简单包上流鼻涕错过了测试

$ nosetests A

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

一个人必须跑

$ nosetests A/B.py

为了赶上测试,但是 如果 A 内部有复杂的子模块结构,很快就会变得笨拙。

如何让鼻子运行包 A 中以“test”开头的所有函数,而不必指定它们出现的每个文件?

【问题讨论】:

  • 这些是您的实际文件名吗?
  • nose 也遵循关于文件名的约定。

标签: python nose nosetests


【解决方案1】:

正如@sobolevn 指出的那样,鼻子跟随convention about filenames

nose 自动从其工作目录(默认为当前工作目录)中找到的 python 源文件、目录和包收集测试。任何与 testMatch 正则表达式匹配的 Python 源文件、目录或包(默认情况下:(?:^|[b_.-])[Tt]est)都将被收集为测试(或用于收集测试的源)。

例如,您可以将 B.py 重命名为 test_B.py

【讨论】:

  • B.py 还包含正在测试的函数,因此重命名模块不是一个选项。我选择将测试放在同一个文件中,而不是单独的 test_.py。
  • @dzhelil 在这种情况下,gregb 答案绝对是要走的路。但是,最好将测试与代码分开(例如A/test/test_B.py
【解决方案2】:

使用--all-modules 标志:

$ nosetests A --all-modules

【讨论】:

    【解决方案3】:

    今天在 python 3.8 上遇到了同样的问题。

    原来在测试文件夹的根目录下添加一个文件setup.cfg可以解决问题。

    例子:

    |code
    |  | __init__.py
    |  | A.py
    |tests
    |  | setup.cfg
    |  | test_A.py
    

    setup.cfg的内容应该是:

    [nosetests]
    traverse-namespace=1
    

    现在运行nosetests tests 就可以了。

    【讨论】:

      猜你喜欢
      • 2018-09-02
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      相关资源
      最近更新 更多