Eclipse RCP: используется другая версия JUnit (4.3.1), чем поставляется с eclipse galileo (4.5.0)

#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 …)