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

我正在使用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,flat比嵌套更好 – 也许你知道,但除此之外,只是为了好玩,启动Python解释器会话并执行’import this’:)

I.e.:简而言之,一旦找到my_app / __ init__.py,它就不会尝试解析PYTHONPATH中任何其他位置的my_app子文件夹

所以,你有两种方法……通常我所做的就是让测试靠近_tests包中的模块.即:

/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
点赞