Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python单元测试去哪里了?_Python_Unit Testing_Code Organization - Fatal编程技术网

Python单元测试去哪里了?

Python单元测试去哪里了?,python,unit-testing,code-organization,Python,Unit Testing,Code Organization,如果您正在编写库或应用程序,那么单元测试文件将放在哪里 将测试文件从主应用程序代码中分离出来很好,但是将它们放入应用程序根目录中的“tests”子目录中却很尴尬,因为这样会使导入要测试的模块变得更困难 这里有最佳实践吗?我不相信有既定的“最佳实践” 我将测试放在应用程序代码之外的另一个目录中。然后,在运行所有测试之前,我将主应用程序目录添加到testrunner脚本中的sys.path(允许您从任何地方导入模块)(该脚本还执行一些其他操作)。这样,当我发布主代码时,我就不必从主代码中删除test

如果您正在编写库或应用程序,那么单元测试文件将放在哪里

将测试文件从主应用程序代码中分离出来很好,但是将它们放入应用程序根目录中的“tests”子目录中却很尴尬,因为这样会使导入要测试的模块变得更困难


这里有最佳实践吗?

我不相信有既定的“最佳实践”


我将测试放在应用程序代码之外的另一个目录中。然后,在运行所有测试之前,我将主应用程序目录添加到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"])