#junit #eclipse-rcp #classloader
#junit #eclipse-rcp #classloader
Вопрос:
Hallo,
У меня следующая ситуация:
Мы разрабатываем приложение Eclipse RCP и хотим переключиться с Eclipse 3.4 на Eclipse 3.5. Наши JUnit-тесты используют JUnit 4.3.1, и у нас есть конфигурация запуска для запуска нашего набора тестов. Я думаю, мне не нужно вдаваться здесь в подробности.
Проблема в:
Запуск тестов с Eclipse 3.5 не работает: JUnit не может найти никаких аннотаций в тестовых классах (ни (at)Test, ни (at)RunWith).
Я исправил библиотеку junit некоторыми выходными данными журнала, чтобы проверить, что происходит. Я обнаружил, что эта проблема связана с загрузкой классов:
Тестовый класс, переданный JUnit, «лежит в» загрузчике классов, который отличается от того, который JUnit использует для загрузки классов аннотаций, таких как ‘RunWith’. В Eclipse 3.4 это не так
in org.junit.internal.requests.ClassRequest:
public Runner getRunner() {
log("TestClass ClassLoader: " this.fTestClass.getClassLoader());
log("RunWith.class ClassLoader: " RunWith.class.getClassLoader());
... // validating test class: searching for annotations and more
}
В первой строке выводится другой загрузчик классов, чем во второй строке. Это плохо, потому что JUnit не может сопоставить аннотации в тестовом классе с классом аннотаций (здесь: RunWith.class ): «RunWith» в CL1 не равно «RunWith» в CL2.
У меня есть решение, которое указывает на основную проблему: замените JUnit 4.5 в Eclipse Galileo на JUnit 4.3.1, чтобы была только одна JUnit-версия: тестовый запуск и классы tests используют JUnit 4.3.1 (мне пришлось исправить «org.eclipse.jdt.junit4.runtime», чтобы принять более раннюю версию junit).
Я думаю, что я также могу заменить JUnit 4.3.1 в моем тестовом классе на версию 4.5, но это пока не вариант.
Предположение: загрузчики классов отличаются, потому что классы «происходят» из разных JUnit-пакетов: тестовый класс с его аннотациями из версии 4.3.1 и тестовые запуски в версии 4.5
Что я хочу знать: есть ли какое-либо другое решение, кроме исправления Eclipse (замена версий JUnit)? Какой-либо аргумент командной строки или что-то подобное? Есть ли конфигурация, позволяющая заставить Eclipse использовать JUnit 4.3.1?
Любые подсказки по вышеописанному анализу приветствуются!
Ответ №1:
Я не уверен, что это то, что вы ищете, но:
В конфигурации запуска ваших тестов JUnit вы можете выбрать, какой тестовый раннер вы хотите использовать (JUnit 4, JUnit 3 …)