【发布时间】:2010-11-08 16:27:00
【问题描述】:
问题
在eclipse下运行单元测试时,有没有办法可靠地确保python源路径和编译的java类路径都添加到Jython PythonPath?
如果没有,是否有比将绝对路径添加到 PyDev PythonPath、外部库列表更好的解决方法?
背景
在继承自 Java 类的 Jython 类上运行 Jython 单元测试时遇到了一个奇怪的问题。
我们有一个 Eclipse RCP 应用程序,其结构(简化)如下:
Config project (Pydev nature only)
scripts
src
classes.py
test
classesTest.py
Core project (Both Java & Pydev natures)
scripts
src
baseClass.java
classes
baseClass.java
Library project (Both Java & Pydev natues, but no Jython scripts)
src
interface.java
classes
interface.class
在classes.py 中,我导入baseClass,它实现了interface.java 中定义的interface。然后我创建了一个继承自 baseClass 的 Jython 类。
在我的classesTest.py 中,我导入类并定义单元测试。
当我尝试使用“Project explorer > classesTest.py > Run as > Jython unit-test”运行单元测试时出现问题:
- 有时它无法找到
baseClass(我认为它会因为ImportError而失败,但我现在无法重现)。 - 在其他时候它会找到
baseClass,但随后找不到interface,因此它会以java.lang.NoClassDefFoundError失败。
如果我在测试模块的开头pprintsys.path,那么我可以看到:
- 虽然
core/scripts在python 路径上,但core/classes和library/classes都不在路径上。 -
core/scripts和core/classes都在 python 路径上,但library/classes仍然不在。
有时,很少有两个类路径都添加到 python 路径并且单元测试工作正常,没有下面的解决方法。不幸的是,我还没有弄清楚如何重现它,并且在源代码树中的文件中看不到它工作和不工作之间的区别。
当前的解决方法
我目前的解决方法是显式地为library/classes 和core/classes 添加“外部库”。不幸的是,这些似乎必须是绝对路径,这意味着我必须为我使用的每个主干、分支或计算机设置不同的路径。因此,我不想将这些提交到修订控制中,每次都必须设置它们很痛苦。
注意事项
请注意,Config 项目仅引用核心项目,但显式引用库项目对类路径没有影响。
另外,在试图找到重现此问题的可靠方法时,我让其他库莫名其妙地从 python 路径中消失,然后又神秘地重新出现,最近的例子是 Mock!
更新
我最近没有看到这个问题(目前使用的是 Eclipse 3.7.1 和 PyDev 2.2.2)所以它可能是我当时使用的 Eclipse/PyDev 组合的异常。
【问题讨论】:
标签: eclipse-rcp jython pydev