我正在编写一个库或一个应用程序,单元测试文件在哪里?
将测试文件与主应用程序代码分开是很好的做法,但将它们放到应用程序根目录内的“tests”子目录中会很麻烦,因为这会导致将要测试的模块更难导入。
还有其他好的做法吗?
只有1个测试文件
如果没有很多的测试文件,把它放在顶层目录是好的(我认为这是pythonic(推荐)):
module/
lib/
__init__.py
module.py
test.py
许多测试文件
如果有很多测试文件,把它放在一个tests文件夹中:
module/
lib/
__init__.py
module.py
tests/
test_module.py
test_module2.py
但是如果你把测试放在tests文件夹中,测试不能import ..lib在CLI中,因为__main__ 不能导入相关的模块,所以我们可以使用nose,或者我们可以添加一个父目录到Python导入路径,为此我将创建一个
env.py
import sys
import os
# append module root directory to sys.path
sys.path.append(
os.path.dirname(
os.path.dirname(
os.path.abspath(__file__)
)
)
)
在
module/
tests/
test_module.py
env.py
并import env在测试导入模块之前
test_module.py
import unittest
# append parent directory to import path
import env
# now we can import the lib module
from lib import module
if __name__ == '__main__':
unittest.main()
对于一个文件module.py,通常应该test_module.py按照Pythonic的命名约定来调用单元测试。
有几个普遍接受的地方可以说test_module.py:
我更喜欢#1,因为它简单的找到测试并导入它们。无论您使用的是哪种构建系统,都可以轻松配置为运行以test_。开始的文件。实际上,用于测试发现的默认unittest模式是test*.py。