Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JUnit и TestNG: main exit -> JVM exit 
V
    Опции темы
MaxPayneC
Дата 16.6.2010, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: нет
Всего: 9



Существует метод, который создает несколько потоков. Эти потоки работают долго и мучительно, очень долго и очень мучительно smile Если написать юнит-тест, с использованием двух фреймворков из сабжа, то JVM завершает работу, когда завершается main. Есть идеи, как с этим бороться, лучше чем вставить в код теста
Код

        boolean isParsersActive;
        do
        {
            Thread.sleep(2000);
            Thread[] threads = new Thread[Thread.activeCount() + 5];
            int threadAmount = Thread.enumerate(threads);
            isParsersActive = false;
            for (int i = 0; i < threadAmount; ++i)
            {
                if (threads[i].getName().startsWith("Parser"))
                {
                    isParsersActive = true;
                    break;
                }
            }
        }
        while (isParsersActive);

?
PM   Вверх
powerOn
Дата 16.6.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 1
Всего: 159



Если я правильно понял проблему, то из теста запускается новый поток, который неуспевает завершится полностью, поскольку тестовый фреймворк завершает выполнение JVM? Если так, то можно прижойниться к текушей нити:

Код

        try {
            Runnable runnable = new Runnable()
            {
                public void run()
                {
                    for (int i = 0; i < 10; i++) {
                        try {
                            System.out.println("Count = " + i);
                            Thread.sleep(2000);
                        } catch (InterruptedException ex) {
                            ex.printStackTrace();
                        }
                    }
                }
            };
            Thread thread = new Thread(runnable);
            thread.start();
            thread.join();
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }






--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
MaxPayneC
Дата 16.6.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: нет
Всего: 9



powerOn, Почти так. В тесте вызывается метод, который плодит много потоков. Этот метод не дожидается завершения выполнения всех потоков, им созданных. Вообще, я уже понял что нужно использовать join smile Но если мы предположим, что я этого не понял, есть способ заставить тестРаннер ждать завершения всех Runnable?
PM   Вверх
powerOn
Дата 16.6.2010, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 1
Всего: 159



Честно говоря, никогда не слышал о подобных настройках в тестовых фреймвёрках. Мне кажется такие ситуации сложно отследить автоматически, ведь одна нить в зависимости от логики может запускать еще несколько, те еще несколько и т.д., а дождаться нужно выполнения всех. Т.е. join в данном случае естественный вариант.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
MaxPayneC
Дата 16.6.2010, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: нет
Всего: 9



Вполне логично, и собственно как я и думал. Благодарю.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Design, Quality, Testing | Следующая тема »


 




[ Время генерации скрипта: 0.0907 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.