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 package

import 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

回到顶部