JUnit - остановить его от выхода по окончании?

Быстрый вопрос JUnit. Я запускаю несколько модульных тестов, которые включают запуск графического интерфейса и выполнение множества других действий.

Я хотел бы увидеть результаты после теста, чтобы подтвердить это визуально. Однако он доходит до конца кода и завершается, как и должно быть. Если я хочу переопределить это, я ставлю точку останова на последнюю строку теста. Хотя это довольно неловко.

Есть ли какой-то вариант, чтобы остановить его от выхода?


person bcoughlan    schedule 29.03.2010    source источник
comment
включать запуск графического интерфейса и выполнение множества действий, а не модульного теста   -  person Samuel Carrijo    schedule 30.03.2010
comment
для тестов, связанных с пользовательским интерфейсом, я бы предложил Selenium — seleniumhq.org   -  person Samuel Carrijo    schedule 30.03.2010
comment
@Samuel: Возможно, мои определения немного неверны. Но мне нужно запустить графический интерфейс, чтобы выполнить тесты на разных компонентах.   -  person bcoughlan    schedule 30.03.2010
comment
да, здорово, что вы тестируете пользовательский интерфейс (это намного сложнее). Я надеюсь, что мое предложение селена также поможет =)   -  person Samuel Carrijo    schedule 30.03.2010


Ответы (4)


Из-за того, что вам требуется графический интерфейс и взаимодействие с пользователем во время выполнения теста, это «функциональный» тест, а не «модульный» тест.

Вы можете записать результаты в файл в конце, это будет иметь дополнительное преимущество, поскольку вы можете утверждать, что вывод правильный/присутствует программно в конце. Если вы действительно хотите, чтобы тест продолжался, вы можете вставить бесконечный цикл в конце теста:

Юнит 3:

public void tearDown() {
    while (true) { Thread.sleep(2000); };
}

Юнит 4:

@After
public void tearDown() {
    while (true) { Thread.sleep(2000); };
}

Это сохранит работу потока JUnit, но вам нужно будет убедиться, что ваши события GUI обрабатываются в другом потоке.

person seanhodges    schedule 29.03.2010

В Eclipse: Запустите конфигурации... > Тест > Продолжайте работу JUnit...

person lexicore    schedule 29.03.2010
comment
Это был ответ на заголовок вашего вопроса. Какова природа графического интерфейса? Для Swing есть jdemo.de, который может быть полезен. - person lexicore; 30.03.2010

Одна из возможностей состоит в том, что ваш тест JUnit выполняет метод tearDown(), возможно, в базовом классе, который закрывает графический интерфейс. Если это так, вы можете переопределить метод tearDown() в тесте JUnit, чтобы предотвратить такое поведение. Например.

protected void tearDown()
{
   //do nothing
}
person Chris Knight    schedule 29.03.2010
comment
Хорошая идея, но графический интерфейс все еще выходит. Я попытался сделать основной класс объектом поля на тот случай, если сборщик мусора уничтожит объект. там тоже не повезло - person bcoughlan; 30.03.2010

Как насчет использования защелки обратного отсчета которые вы отсчитываете.

частный статический обратный отсчет CountDownLatch = новый CountDownLatch (1);

@AfterClass
public static void tearDownClass() throws Exception {
    countdown.await();
}

Затем где-то еще в вашем коде вы отсчитываете защелку по событию.

countdown.countDown();

Когда вызывается countdown.countDown(), countdown.await() продолжается.

person Alfred    schedule 30.03.2010