Вопрос
Есть ли способ надежно убедиться, что оба пути исходного кода Python и скомпилированные пути классов Java добавлены в Jython PythonPath при выполнении модульных тестов в Eclipse?
Если нет, есть ли лучший обходной путь, чем добавление абсолютных путей в список PyDev PythonPath, внешние библиотеки?
Справочная информация
У меня возникла странная проблема с запуском модульных тестов Jython вкласс Jython, который наследуется от класса Java.
У нас есть приложение RCP Eclipse со структурой (упрощенной), подобной этой:
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
, определенный в interface.java
.Затем я создаю класс Jython, который наследуется от baseClass
.
. В моем classesTest.py
я импортирую классы и определяю модульные тесты.
Проблемы возникают, когда я пытаюсь запустить модультесты с использованием "Project Explorer> classesTest.py> Run as> Jython unit-test":
- Иногда не удается найти
baseClass
(я думаю, что это не удается с ImportError
, ноЯ не могу воспроизвести это прямо сейчас). - В других случаях он находит
baseClass
, но затем не может найти interface
, поэтому происходит сбой с java.lang.NoClassDefFoundError
.
Если я pprint
sys.path
в начале тестового модуля, то я вижу, что:
- Пока
core/scripts
находится на пути Python, ни core/classes
ни library/classes
не находятся на пути. - Оба
core/scripts
и core/classes
находятся на пути питона, но library/classes
все еще нет.
Иногда оченьредко пути обоих классов добавляются к пути python, и модульные тесты работают нормально, без обходного пути ниже.К сожалению, я не разработал, как воспроизвести это и не вижу разницы в файлах в дереве исходных кодов между тем, что оно работает, и оно не работает.
Текущий обходной путь
Мой текущий обходной путьявно добавить в «Внешние библиотеки» для library/classes
и core/classes
явно.К сожалению, похоже, что это должны быть абсолютные пути, что означает, что я должен устанавливать их по-разному для каждого транка, филиала или компьютера, которые я использую.Поэтому я не хочу вводить их в систему контроля версий, и каждый раз их приходится настраивать.
Примечания
Обратите внимание, что проект Config ссылается только на основной проект., но ссылка на библиотечный проект явно не имеет никакого значения для пути к классам.
Кроме того, пытаясь найти надежный метод для воспроизведения этой проблемы, я заставил другие библиотеки необъяснимым образом исчезнуть из пути к Python, а затем так же загадочноснова появляются, последний пример - Mock!
Обновление
Я не видел эту проблему в последнее время (в настоящее время использую Eclipse 3.7.1 и PyDev 2.2.2), так что это может быть аберрациейс комбинацией Eclipse / PyDev, которую я использовал в то время.