使用 pydev 中的 unittest 在 Python 中对整个项目层次结构进行单元测试

2024-03-25

我正在使用 unittest 模块对一些使用 Pydev 在包的分层结构中创建的 python 代码进行单元测试。 当我尝试在 pydev 中对实际源代码及其单元测试使用单独的源文件夹时,问题就出现了。

project
  |----src
  |     |----com
  |     |     |----myself
  |     |     |       |----MyApplication
  |     |     |       |          |----SampleFileToTest.py  => The application file that I want to test
  |----test
  |     |----com
  |     |     |----myself
  |     |     |       |----MyApplication
  |     |     |       |          |----TestTheSampleFileToTest.py  => My test case file

当我尝试分离层次结构时,在引用测试文件中的应用程序文件时遇到问题。 是否可以采用 Junit 方式,即使用不同的源文件夹但保持相同的包名称?


Python 本身默认不支持这一点(即:与 PyDev 无关)——我也有 Java 背景,因此,您可能需要在这里忘记一些 Java 概念:)

在 Python 中,每当文件夹带有__init__.py找到后,将不再在其他路径中搜索该包。我认为 setuptools 有一些 hackery 可以实现这一点,我隐约记得 Python 3 可能会添加一些对它的支持,但到目前为止我认为一般不建议这样做......这与 Java 方法有很大不同 - 在Python,扁平比嵌套更好——也许你知道,但除此之外,只是为了好玩,启动一个 Python 解释器会话并执行“导入此”:)

即:简而言之,一次my_app/__init__.py找到后,它不会尝试解析 PYTHONPATH 中任何其他位置的 my_app 子文件夹

所以,你有两种方法......通常我所做的是将测试靠近 _tests 包中的模块。 IE。:

/project
/project/src
/project/src/myapp
/project/src/myapp/__init__.py
/project/src/myapp/_tests
/project/src/myapp/_tests/__init__.py
/project/src/myapp/_tests/test_myapp.py

另一种方法(我必须说我不太喜欢这种方法,因为测试“感觉”与代码更加分离),将有一个单独的测试包:

/project
/project/src
/project/src/myapp
/project/src/myapp/__init__.py
/project/src/myapp_tests/__init__.py
/project/src/myapp_tests/test_myapp.py
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pydev 中的 unittest 在 Python 中对整个项目层次结构进行单元测试 的相关文章

随机推荐