Python单元测试去哪里了?
如果您正在编写库或应用程序,那么单元测试文件将放在哪里 将测试文件从主应用程序代码中分离出来很好,但是将它们放入应用程序根目录中的“tests”子目录中却很尴尬,因为这样会使导入要测试的模块变得更困难Python单元测试去哪里了?,python,unit-testing,code-organization,Python,Unit Testing,Code Organization,如果您正在编写库或应用程序,那么单元测试文件将放在哪里 将测试文件从主应用程序代码中分离出来很好,但是将它们放入应用程序根目录中的“tests”子目录中却很尴尬,因为这样会使导入要测试的模块变得更困难 这里有最佳实践吗?我不相信有既定的“最佳实践” 我将测试放在应用程序代码之外的另一个目录中。然后,在运行所有测试之前,我将主应用程序目录添加到testrunner脚本中的sys.path(允许您从任何地方导入模块)(该脚本还执行一些其他操作)。这样,当我发布主代码时,我就不必从主代码中删除test
这里有最佳实践吗?我不相信有既定的“最佳实践”
我将测试放在应用程序代码之外的另一个目录中。然后,在运行所有测试之前,我将主应用程序目录添加到testrunner脚本中的sys.path(允许您从任何地方导入模块)(该脚本还执行一些其他操作)。这样,当我发布主代码时,我就不必从主代码中删除tests目录,节省了我的时间和精力,即使是很小的工作量。我不相信有一个既定的“最佳实践”
我将测试放在应用程序代码之外的另一个目录中。然后,在运行所有测试之前,我将主应用程序目录添加到testrunner脚本中的sys.path(允许您从任何地方导入模块)(该脚本还执行一些其他操作)。这样,当我发布主代码时,我就不必从主代码中删除测试目录,节省了我的时间和精力(如果非常少的话)。通常的做法是将测试目录与模块/包放在同一父目录中。因此,如果您的模块名为foo.py,您的目录布局将如下所示:
parent_dir/
foo.py
tests/
当然,没有一种方法可以做到这一点。您还可以创建一个tests子目录,并使用导入模块
无论您将测试放在何处,我建议您使用来运行它们。在目录中搜索测试。通过这种方式,您可以将测试放在组织上最有意义的地方。一种常见做法是将测试目录放在与模块/包相同的父目录中。因此,如果您的模块名为foo.py,您的目录布局将如下所示:
parent_dir/
foo.py
tests/
当然,没有一种方法可以做到这一点。您还可以创建一个tests子目录,并使用导入模块
无论您将测试放在何处,我建议您使用来运行它们。在目录中搜索测试。这样,您就可以将测试放在组织上最有意义的地方。我最近开始用Python编程,所以我还没有机会找到最佳实践。 但是,我已经编写了一个模块,可以找到所有测试并运行它们 因此,我: app/ appfile.py test/ appfileTest.py 应用程序/ appfile.py 试验/ appfileTest.py
随着我进入更大的项目,我必须看看它是如何进行的。我最近开始用Python编程,所以我还没有机会找到最佳实践。 但是,我已经编写了一个模块,可以找到所有测试并运行它们 因此,我: app/ appfile.py test/ appfileTest.py 应用程序/ appfile.py 试验/ appfileTest.py
我必须看看在我进行更大的项目时它是如何进行的。我使用
tests/
目录,然后使用相对导入导入主要的应用程序模块。因此,在MyApp/tests/foo.py中,可能有:
from .. import foo
要导入
MyApp.foo
模块。我使用tests/
目录,然后使用相对导入导入主要应用程序模块。因此,在MyApp/tests/foo.py中,可能有:
from .. import foo
为了在C#中导入MyApp.foo
模块,我通常将测试分离到一个单独的程序集中
在Python中——到目前为止——我倾向于编写doctest,其中测试在函数的docstring中,或者将它们放在模块底部的块中,如果uuu name uuu==“uu main uu”
块中。在C#中,我通常将测试分离到一个单独的程序集中
在Python中——到目前为止——我倾向于编写doctest,其中测试在函数的docstring中,或者将它们放在模块底部的
test\u module.py
块中,遵循Python命名约定
有几个常见的地方可以放置test\u module.py
:
module.py
相同的目录中。/tests/test_module.py
中(与代码目录处于同一级别)tests/test_module.py
(代码目录下的一级)中我更喜欢#1,因为它可以简单地找到测试并导入它们。您正在使用的任何构建系统都可以轻松配置为运行以
test\uu
开头的文件。实际上,对于文件module.py
,单元测试通常应称为test\u module.py
,遵循Python命名约定
有几个常见的地方可以放置test\u module.py
:
module.py
相同的目录中。/tests/test_module.py
中(与代码目录处于同一级别)tests/test_module.py
(代码目录下的一级)中我更喜欢#1,因为它可以简单地找到测试并导入它们。您正在使用的任何构建系统都可以轻松配置为运行以
test\uu
开头的文件。实际上,在编写一个名为“foo”的包时,我将把单元测试放在一个单独的包“foo\u test”中。然后,模块和子包将具有与SUT包模块相同的名称。例如,模块foo.x.y的测试可在foo_test.x.y中找到。然后,每个测试包的_init__u;.py文件包含一个AllTests套件,该套件包含该包的所有测试套件。setuptools提供了一种方便的方法来指定主测试包,因此在“python setup.py develope”之后,您可以只使用“python setup.py test”或“python setup.py test-s foo_test.x.SomeTestSuite”来指定一个特定的测试包。在编写一个名为“foo”的包时,我会将单元测试放在一个单独的包“foo_test”中。模块和子模块
app/src/code.py
app/testing/code_test.py
app/docs/..
project/
src/
code.py
tests/
setup.py
setup.py develop
setup.py tests
<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]
module/
lib/
__init__.py
module.py
test.py
module/
lib/
__init__.py
module.py
tests/
test_module.py
test_module_function.py
module/
lib/
__init__.py
module.py
tests/
__init__.py
test_module.py
test_module_function.py
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
find_packages("src", exclude=["*.tests", "*.tests.*", "tests.*", "tests"])