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