4

我正在使用 unittest 模块对一些 python 代码进行单元测试,这些代码是使用 Pydev 在包的层次结构中创建的。当我尝试对实际源代码及其在 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 方式,即使用不同的源文件夹但保持相同的包名称?

4

1 回答 1

2

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

在 Python 中,只要找到带有 的文件夹,__init__.py就不会再在其他路径中搜索该包。我认为 setuptools 有一些技巧可以使这项工作发挥作用,并且我模糊地记得 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
于 2012-02-09T14:27:40.683 回答