2010-03-29 6 views
3

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

Я хотел был бы видеть результаты после испытания для того чтобы подтвердить его визуально. Тем не менее, он доходит до конца кода и выходит, как и должно. Если я хочу переопределить это, я поставлю точку останова на последней строке теста. Это довольно неудобно.

Есть ли возможность остановить его от выхода?

+1

включить запуск графического интерфейса пользователя и выполнить нагрузку - не единичный тест –

+1

для тестов, связанных с UI, я бы предложил Selenium - http://seleniumhq.org/ –

+1

@Samuel: Возможно, мои определения немного отличаются , Но мне нужно запустить графический интерфейс для выполнения тестов на разных компонентах. – bcoughlan

ответ

2

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

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

JUnit 3:

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

JUnit 4:

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

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

1

В Eclipse: Запуск конфигурации ...> Test> Keep JUnit работает ...

+0

Пробовал это, он не работает, GUI по-прежнему выходит – bcoughlan

+0

Это был ответ на заголовок вашего вопроса. Какова природа GUI? Для Swing есть http://www.jdemo.de/, которые могут быть полезны. – lexicore

0

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

protected void tearDown() 
{ 
    //do nothing 
} 
+0

Хорошая идея, но GUI по-прежнему выходит. Я попытался сделать основной класс полевым объектом на всякий случай, если это был сборщик мусора, уничтожающий объект. Не повезло – bcoughlan

0

Как насчет использования countdownlatch, который вы считаете.

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

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

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

countdown.countDown(); 

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

Смежные вопросы