Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/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 单元测试包Maven风格约定_Python_Unit Testing_Coding Style_Directory Structure_Pybuilder - Fatal编程技术网

Python 单元测试包Maven风格约定

Python 单元测试包Maven风格约定,python,unit-testing,coding-style,directory-structure,pybuilder,Python,Unit Testing,Coding Style,Directory Structure,Pybuilder,我想创建一个包含单元测试和包的pybuilder项目。例如,修改后的示例将“helloworld”移至包“hello” 我的第一反应是将包结构与“main”和“unittest”源匹配: 这不起作用,因为“hello”包冲突 我看到自己只是跳过了unittests中的顶级pybuilder包,但如果有多个顶级包,就不会这样做 我的第二个猜测是为单元测试创建额外的顶级包 \---unittest \---python \---tests | __

我想创建一个包含单元测试和包的pybuilder项目。例如,修改后的示例将“helloworld”移至包“hello”

我的第一反应是将包结构与“main”和“unittest”源匹配:

这不起作用,因为“hello”包冲突

我看到自己只是跳过了unittests中的顶级pybuilder包,但如果有多个顶级包,就不会这样做

我的第二个猜测是为单元测试创建额外的顶级包

\---unittest
    \---python
        \---tests
            |   __init__.py
            \---hello
                    helloworld_tests.py
                    __init__.py

有没有更好的解决方案或既定的惯例来组织包中的python测试?

对于OP来说可能没有什么新的东西,但我只想在一个地方收集我能想到的所有选项:

1)只需将
\u测试
附加到顶级软件包的名称中

src/test/python
中镜像
src/main/python
结构的最简单方法是在顶级包的名称中添加
\u tests
。例如,如果我只有一个顶级包
rootPkg
,那么我可以将相应的
rootPkg\u测试添加到
test/
子目录中:

src
├── main
│   ├── python
│   │   └── rootPkg
│   │       ├── __init__.py
│   │       ├── pkgA
│   │       │   ├── __init__.py
│   │       │   └── modA.py
│   │       └── pkgB
│   │           ├── __init__.py
│   │           └── modB.py
│   └── scripts
│       └── entryPointScript.py
└── test
    └── python
        └── rootPkg_tests
            ├── __init__.py
            ├── pkgA
            │   ├── __init__.py
            │   └── modA_tests.py
            └── pkgB
                ├── __init__.py
                └── modB_tests.py
这似乎与PyBuilder 0.11.15和
unittest
插件配合得很好(注意,我偏离了PyBuilders的惯例,将测试放在
test
中,而不是
unittest
,如果您打算使用多个测试框架,您可能不应该这样做)

2)如果只有一个包:像PyBuilder一样操作

PyBuilder本身是使用PyBuilder构建的。这就是它的源目录的样子(大大减少了,省略了不必要的细节):

如果我理解正确,
unittest
中的树镜像了
src
中的树,但是顶级包
pybuilder
的目录被省略。这就是您在问题中描述的第一个解决方法。缺点是,如果有多个顶级包,它就不能真正工作

3)添加一个额外的
测试
顶级包

这就是您建议的解决方法:在
main
中镜像树,但将所有内容包装在附加的
测试包中。这适用于
/src/main/python
中的许多顶级包,并防止任何包名冲突


我不知道有什么惯例。如果你对此事有意见,请在下面的评论中投票

\---unittest
    \---python
        \---tests
            |   __init__.py
            \---hello
                    helloworld_tests.py
                    __init__.py
src
├── main
│   ├── python
│   │   └── rootPkg
│   │       ├── __init__.py
│   │       ├── pkgA
│   │       │   ├── __init__.py
│   │       │   └── modA.py
│   │       └── pkgB
│   │           ├── __init__.py
│   │           └── modB.py
│   └── scripts
│       └── entryPointScript.py
└── test
    └── python
        └── rootPkg_tests
            ├── __init__.py
            ├── pkgA
            │   ├── __init__.py
            │   └── modA_tests.py
            └── pkgB
                ├── __init__.py
                └── modB_tests.py
src
├── main
│   ├── python
│   │   └── pybuilder
│   │       ├── __init__.py
│   │       ├── cli.py
│   │       ├── core.py
│   │       └── plugins
│   │           ├── __init__.py
│   │           ├── core_plugin.py
│   │           └── exec_plugin.py
│   └── scripts
│       └── pyb
└── unittest
    └── python
        ├── cli_tests.py
        ├── core_tests.py
        ├── plugins
        │   ├── exec_plugin_tests.py
        │   ├── __init__.py
        │   ├── python
        │   │   ├── core_plugin_tests.py
        │   │   ├── __init__.py