单元测试包Maven风格的约定

2024-05-15 02:57:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

+---src
   +---main
   |   \---python
   |       \---hello
   |               helloworld.py
   |               __init__.py
   |
   \---unittest
       \---python
           \---hello
                   helloworld_tests.py
                   __init__.py

由于“hello”包发生冲突,此操作不起作用。在

^{pr2}$

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

我的第二个猜测是为unittests创建额外的顶级包。在

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

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


Tags: 项目pyapp示例helloinitmaintests
1条回答
网友
1楼 · 发布于 2024-05-15 02:57:05

也许这部片子没有什么新鲜事,但我只想把我能想到的所有选项都集中在一个地方:

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

src/test/python中镜像src/main/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

这似乎与pybuilder0.11.15和unittest插件配合得很好(请注意,我已经偏离了PyBuilders的约定,将测试放在test而不是{}中,如果您打算使用多个测试框架,您可能不应该这样做)。在

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

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

^{pr2}$

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

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

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


我不知道有什么习俗。如果你对这件事有意见,请投下面的一条评论。在

相关问题 更多 >

    热门问题