#java #eclipse #testing #junit
#java #eclipse #тестирование #junit
Вопрос:
Я пытаюсь заставить тесты JUnit 4 правильно запускаться в Eclipse Indigo SR1, но что-то не так. В простейшем случае, о котором я могу думать (как показано ниже):
package ints;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
public class IntTest {
@Before
public void setUp() throws Exception {
System.out.println("setUp()");
}
@Test
public void test() {
System.out.println("assertEquals(1, 1);");
assertEquals(1, 1);
}
@Test
public void test2() {
System.out.println("assertEquals(1, 2);");
assertEquals(1, 2);
}
}
Когда я запускаю это в Eclipse (Alt Shift X, T), представление JUnit сообщает «Запуски: 0/0, Ошибки: 0, сбои: 0», в то время как консоль отображает приведенное ниже, но я больше ничего не получаю. Я могу создавать исключения из методов тестирования, и они также не отображаются.
setUp()
assertEquals(1, 1);
setUp()
assertEquals(1, 2);
Есть идеи относительно того, что дает?
Комментарии:
1. Хм, странно. Просто для удовольствия я открыл новое рабочее пространство и попробовал его. По-прежнему ничего.
2. Java 1.7.0, 32-разрядная и 64-разрядная версии. Windows 7, 64-разрядная версия.
3. Вы пробовали использовать Java 1.6.x?
4. Я попробовал Java 1.6. Сначала удалил все мои JDK / JRE. Затем установил 1.6u29 (32 и 64 бит), и это сработало. Установлен 1.7u1 (64-разрядный), и это сработало. Установлен 1.7u1 (32-разрядный), и он перестал работать. Удалил 1.7u1 (32 бит), и он снова начал работать. У меня это работает, что приятно, но это похоже на волшебство.
Ответ №1:
Я думаю, что в вашей системе установлены как JUnit 3, так и JUnit4, и проект импортирует неправильную версию JUnit. Это вызовет всевозможные странные проблемы.
В вашем случае кажется, что код вообще не рассматривается как тесты, что имеет смысл, если вы используете JUnit3.
Проверьте свой buildpath, чтобы узнать, какой JUnit вы используете.
Комментарии:
1. Если Eclipse не лжет мне, org.junit_4.8.2_v20110321-1705junit.jar находится на пути к классу (через зависимости подключаемых модулей или напрямую через JUnit4).
2. Кроме того, я не уверен, заметили ли вы это, но мои System.outs записываются, поэтому вызывается мой код.
3. Хм. Да, вы правы. Что ж, код правильный, поэтому ошибка должна быть в другом месте. Вы уверены, что в представлении JUnit отображается ваш тест? Он должен сказать что-то вроде «IntTest [Runner: JUnit4] (0.0000с)». Тот же результат, если щелкнуть правой кнопкой мыши по проекту и выбрать «Запустить как …» — «Тест JUnit»?
4. В представлении JUnit отображается «IntTest», а затем переключается на «Завершенный». Консоль отображает вышеуказанный вывод. Я получаю тот же результат (за вычетом отображаемого имени), если я щелкаю правой кнопкой мыши по проекту и запускаю его как тест JUnit.
5. И там также написано «[Runner: JUnit4]» ? Если да, то у меня нет идей. Попробуйте загрузить новое Eclipse и попробуйте использовать старое рабочее пространство. Запустите новое рабочее пространство / проект и попробуйте старую установку eclipse. Посмотрите, имеет ли это какое-либо значение.
Ответ №2:
У меня была такая же проблема с JUnit. Я запустил обновление своего старого доброго JDK, но проблема осталась, поэтому я полностью удалил все JDK-ы со своего компьютера и установил новейший jdk 6, и Eclipse Indigo волшебным образом начал работать должным образом.
Возможно, постоянно обновляемый jdk 6 обновлен неправильно…
Ответ №3:
Проверьте (локальные) правила брандмауэра на компьютере. Я столкнулся с той же проблемой год назад, и разрешение локальных подключений для Eclipse / Java решило проблему. (Я только что нашел заметку об этом.)
Ответ №4:
По какой-то причине удаление 32-разрядного JDK 1.7 решило эту проблему для меня. Похоже, это не было на пути или что-то еще, что я мог понять. Это слишком похоже на волшебство, но это сработало.
У меня было установлено 4 JDK (1.6 и 1.7, 32-разрядные и 64-разрядные версии). Теперь у меня есть 3.
Ответ №5:
У меня была такая же проблема. JUnit запускается, но не работает, не завершен и не дает никаких исключений. Для меня сработала команда проверки брандмауэра iptables и добавления запуска:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
JUnit нужно это разрешение для запуска — разрешить взаимодействие с внутренним интерфейсом.