Nose:测试给定包中的所有模块

问题描述 投票:0回答:4

我有一个包含多个子包的包,其中一个用于测试(名为

tests
)。由于子包名称清楚地表明所包含的模块是测试模块,因此我不希望使用测试名称模式污染模块名称,nose 希望包含它们以进行测试。这就是我想到的设置:

- foo
  - __init__.py
  ...
  - bar
    - __init__.py
    ...
  - baz
    - __init__.py
    ...
  - tests
    - __init__.py
    - something.py

现在,默认情况下,nose 不会运行

foo.tests.something
中找到的测试。我知道鼻子接受
-i
选项来定义正则表达式,以搜索测试中的其他内容。所以
nose -i something
在这里完成工作。但是,我在
tests
包中有一堆模块,并且不想明确命名它们。
nose -i tests\..*
不起作用,看起来nose只与模块基本名称匹配。作为最后的手段,我可以运行
nose --all-modules
,但这也会检查
foo.bar
foo.baz
——我想避免这种情况。

那么,我如何指示nose在给定包内的所有模块中查找测试(在我的例子中是

tests
)?我可以为这个任务编写一个鼻子插件,但我正在寻找一个标准的解决方案。

python testing nose
4个回答
4
投票

如果您在测试中使用

test_
前缀命名文件(即,将
something.py
重命名为
test_something.py
,默认情况下,running nose 应该会拾取它们。

你说“我不喜欢用测试名称模式污染模块名称,nose希望包含它们进行测试”,但“某事”并不是对文件的描述,因为该文件测试了该东西。使用不令人困惑的标准方式命名测试有什么问题?


3
投票

您应该能够将文件导入到您的

__init__.py
中并提取它们。我有这样的设置:

- app:
  - __init__.py
  - models.py
  - views.py
  - tests:
    - __init__.py
    - models.py # contain tests
    - views.py # contain tests

tests/__init__.py
文件中我有以下内容:

from app.tests.models import *
from app.tests.views import *

这违背了使用正则表达式查找测试的好处之一(鼻子的目标),但有效。

如果您想避免命名方法来匹配正则表达式,您还可以使用装饰器

@istest
将单个定义标记为测试。我没有尝试对与正则表达式不匹配的模块(py 文件)执行此操作,但我怀疑如果没有上述导入,它是否会起作用。

注意,我已经放弃了

__init__.py
中的导入,只需在我的测试方法和文件名前添加 test_ 前缀,并在我的类后添加 Test 即可。我发现这使得代码更具自描述性,即使在测试类中也可能有设置方法和辅助方法(例如生成器)。


0
投票

鼻子填充物

使用鼻子填充物对许多一直在考虑[非手术鼻子整形]的人来说是有益的。通过这些程序可以暂时纠正不对称并消除缺陷。然而,结果各不相同,因此您应该咨询合格的从业者。在做出决定之前,请务必进行研究和审查。


-1
投票

有鼻子:

nosetests --all-modules

使用 py.test 可以通过将其放入 setup.cfg(配置文件)来完成:

[pytest]
python_files=*.py

检查此文档:pytest 文档

© www.soinside.com 2019 - 2024. All rights reserved.