Python-使用典型的测试目录结构运行unittest
即使是一个简单的Python模块,最常见的目录结构似乎也是将单元测试分成各自的test目录:
new_project/ antigravity/
antigravity.py
test/
test_antigravity.py
setup.py
etc.
例如,请参见此Python项目howto。
我的问题是,实际上运行测试的通常方法是什么?我怀疑这对除我以外的所有人来说都是显而易见的,但是你不能仅从python test_antigravity.pytest
目录运行,import antigravity
因为模块不在路径上,它将失败。
我知道我可以修改PYTHONPATH和其他与搜索路径有关的技巧,但我不敢相信这是最简单的方法-如果你是开发人员,那很好,但如果用户只是想检查测试结果,就不能期望用户使用通过。
另一种选择是将测试文件复制到另一个目录中,但是似乎有点愚蠢,并且错过了将它们放在一个单独目录中的意义。
那么,如果你刚刚将源代码下载到我的新项目中,将如何运行单元测试?我希望有一个答案可以对用户说:“要运行单元测试,请执行X
。”
回答:
我认为最好的解决方案是使用unittest
命令行界面,该界面会将目录添加到,sys.path
因此你不必(在TestLoader
类中完成)。
例如,对于这样的目录结构:
new_project├── antigravity.py
└── test_antigravity.py
你可以运行:
$ cd new_project$ python -m unittest test_antigravity
对于像你这样的目录结构:
new_project├── antigravity
│ ├── __init__.py # make it a package
│ └── antigravity.py
└── test
├── __init__.py # also make test a package
└── test_antigravity.py
在test包内的测试模块中,你可以antigravity照常导入包及其模块:
# import the packageimport antigravity
# import the antigravity module
from antigravity import antigravity
# or an object inside the antigravity module
from antigravity.antigravity import my_object
运行一个测试模块:
要运行单个测试模块,在这种情况下test_antigravity.py:
$ cd new_project$ python -m unittest test.test_antigravity
只需以导入模块的相同方式引用测试模块即可。
运行单个测试用例或测试方法:
你也可以运行一个TestCase或一个测试方法:
$ python -m unittest test.test_antigravity.GravityTestCase$ python -m unittest test.test_antigravity.GravityTestCase.test_method
运行所有测试:
你还可以使用测试发现,它将为你发现并运行所有测试,它们必须是命名为模块或包的模块test*.py(可以通过-p
, –pattern
标记进行更改):
$ cd new_project$ python -m unittest discover
这将运行包中的所有test*.py
模块test
。
以上是 Python-使用典型的测试目录结构运行unittest 的全部内容, 来源链接: utcz.com/qa/432430.html