如果你正在编写一个库或应用程序,那么单元测试文件应该放在哪里?
将测试文件与主应用程序代码分开是很好的,但将它们放在应用程序根目录中的“tests”子目录中是很尴尬的,因为这会使导入将要测试的模块变得更加困难。
这里是否存在最佳实践?
如果你正在编写一个库或应用程序,那么单元测试文件应该放在哪里?
将测试文件与主应用程序代码分开是很好的,但将它们放在应用程序根目录中的“tests”子目录中是很尴尬的,因为这会使导入将要测试的模块变得更加困难。
这里是否存在最佳实践?
当前回答
对于文件module.py,单元测试通常应该被称为test_module.py,遵循python命名约定。
test_module.py有几个常用的存放位置:
和module.py在同一个目录下。 在../tests/test_module.py中(与代码目录处于同一级别)。 在tests/test_module.py中(代码目录下的一级)。
我更喜欢#1,因为它很容易找到测试并导入它们。无论您使用什么构建系统,都可以轻松地配置为运行以test_开头的文件。实际上,用于测试发现的默认单元测试模式是test*.py。
其他回答
我建议你在GitHub上查看一些主要的Python项目,并获得一些想法。
当你的代码变大,你添加了更多的库,最好在你有setup.py的同一个目录下创建一个测试文件夹,并为每种测试类型镜像你的项目目录结构(unittest, integration,…)
例如,如果你有一个这样的目录结构:
myPackage/
myapp/
moduleA/
__init__.py
module_A.py
moduleB/
__init__.py
module_B.py
setup.py
添加测试文件夹后,您将拥有如下目录结构:
myPackage/
myapp/
moduleA/
__init__.py
module_A.py
moduleB/
__init__.py
module_B.py
test/
unit/
myapp/
moduleA/
module_A_test.py
moduleB/
module_B_test.py
integration/
myapp/
moduleA/
module_A_test.py
moduleB/
module_B_test.py
setup.py
许多正确编写的Python包使用相同的结构。Boto包就是一个很好的例子。 检查https://github.com/boto/boto
一种常见的做法是将测试目录放在与模块/包相同的父目录中。因此,如果你的模块名为foo.py,你的目录布局将如下所示:
parent_dir/
foo.py
tests/
当然,没有一种方法可以做到这一点。您还可以创建一个tests子目录,并使用绝对导入导入模块。
无论您在哪里进行测试,我都建议您使用nose来运行它们。Nose在您的目录中搜索测试。这样,您就可以把测试放在组织上最有意义的地方。
如果测试很简单,就把它们放在文档字符串中——大多数Python测试框架都可以使用它:
>>> import module
>>> module.method('test')
'testresult'
对于其他更复杂的测试,我将它们放在../tests/test_module.py或tests/test_module.py中。
我最近开始用Python编程,所以我还没有机会找到最佳实践。 但是,我已经写了一个模块,它可以找到所有的测试并运行它们。
所以,我有:
app/ appfile.py test/ appfileTest.py
当我进入更大的项目时,我得看看情况如何。
根据我用Python开发测试框架的经验,我建议将Python单元测试放在一个单独的目录中。维护对称的目录结构。这将有助于只打包核心库,而不打包单元测试。下面是通过原理图实现的。
<Main Package>
/ \
/ \
lib tests
/ \
[module1.py, module2.py, [ut_module1.py, ut_module2.py,
module3.py module4.py, ut_module3.py, ut_module.py]
__init__.py]
通过这种方式,当您使用rpm打包这些库时,您可以只打包主库模块(仅)。这有助于可维护性,特别是在敏捷环境中。