Python Nose不运行测试
假设您有一个名为a的python包,其目录结构如下Python Nose不运行测试,python,nose,nosetests,Python,Nose,Nosetests,假设您有一个名为a的python包,其目录结构如下 A ├── B.py └── __init__.py 其中\uuuu init\uuuu.py为空,B.py的内容由 def test_B(): assert False 在上面的简单包上运行nose会错过测试 $ nosetests A ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK
A
├── B.py
└── __init__.py
其中\uuuu init\uuuu.py
为空,B.py
的内容由
def test_B():
assert False
在上面的简单包上运行nose会错过测试
$ nosetests A
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
一个人必须跑
$ nosetests A/B.py
为了赶上考试,但是
如果一个模块内部有一个复杂的子模块结构,那么它很快就会变得笨拙
如何让nose运行包A中以“test”开头的所有函数,而不必指定它们出现的每个文件?正如@sobolevn所指出的,nose遵循一个: nose从其工作目录(默认为当前工作目录)中的python源文件、目录和包中自动收集测试。任何与testMatch正则表达式匹配的python源文件、目录或包(默认情况下:(?:^ |[b_。-])[Tt]est)都将作为测试(或测试集合的源代码)进行收集 例如,您可以将
B.py
重命名为test\u B.py
。使用--all modules
标志:
$ nosetests A --all-modules
今天python 3.8也有同样的问题 事实证明,在测试文件夹的根目录中添加文件
setup.cfg
可以解决问题
例如:
|code
| | __init__.py
| | A.py
|tests
| | setup.cfg
| | test_A.py
setup.cfg
的内容应为:
[nosetests]
traverse-namespace=1
现在运行
nosetests测试将起作用。这些是您的实际文件名吗?nose
也遵循关于文件名的约定。B.py还包含正在测试的函数,因此重命名模块将不是一个选项。我选择将测试放在同一个文件中,而不是一个单独的测试_uz.py。@dzhelil在这种情况下,gregb答案肯定是正确的选择。但是,将测试与代码分开是一种很好的做法(例如,a/test/test_B.py
)