单元测试包Maven风格约定

时间:2015-11-12 08:12:46

标签: python unit-testing coding-style directory-structure pybuilder

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

我的第一直觉是将包结构与“main”和“unittest”来源相匹配:

BUILD FAILED - 'module' object has no attribute 'helloworld_tests'

由于冲突的“hello”包,这不起作用。

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

我看到pybuilder本身只是跳过单元测试中的顶级pybuilder包,但如果有多个顶级包则不会这样做。

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

{{1}}

有没有更好的解决方案或已建立的约定如何在包中组织python测试?

1 个答案:

答案 0 :(得分:1)

OP可能没有什么新东西,但我只是想在一个地方收集所有可以选择的选项:

1)只需将_tests附加到顶级软件包的名称

src/main/python几乎1:1中镜像src/test/python的结构的最简单方法是,只需将_tests附加到顶级包的名称即可。例如,如果我只有一个顶级包rootPkg,那么我可以将相应的rootPkg_tests添加到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构建的。这是它的源目录的样子(大大减少了,省略了不必要的细节):

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

如果我理解正确,unittest中的树会镜像src中的树,但会忽略顶级包pybuilder的目录。这就是您在问题中描述的第一个解决方法。缺点是,如果有多个顶级软件包,它就无法正常工作。

3)添加一个tests顶级软件包

这就是你提出的解决方法:镜像main中的树,但将所有内容包装在另一个tests包中。这适用于/src/main/python中的许多顶级包,可防止任何包名冲突。

我不知道任何惯例。如果您对此事有意见,请提出以下评论之一。

相关问题