2013-07-25 2 views
0

Моя текущая задача тест выглядит следующим образом:Gradle тест: как сделать что-то, даже если тесты не

test { 
    doFirst { 
     println 'Starting application...' 
     Thread.startDaemon { 
      appProcess = testServerExec.execute() 
     } 
     sleep 20000 // wait for thread to start 
    } 

    doLast { 
     appProcess.destroy() 
    } 
} 

Я заметил, что если тесты проходят, appProcess.destroy() называется и все счастливы. Однако, если тесты терпят неудачу, поток задерживается, и я должен сам убить процесс. Я знаю, что у Gradle есть попытка/наконец, но я не уверен, как правильно использовать это в этом случае. В принципе, я хочу, чтобы appProcess.destroy() работал, даже если тесты терпят неудачу.

Как я могу это сделать?

Редактировать: Обнаружено beforeSuite и afterSuite, но я запускаю несколько наборов тестов, и я хочу, чтобы этот поток был запущен перед всеми наборами и был убит после всех наборов.

+0

Я не эксперт, но вы пробовали 'afterTest'? Кажется, это возможность срыва. [doc] (http://www.gradle.org/docs/current/javadoc/org/gradle/api/tasks/testing/Test.html#afterTest (groovy.lang.Closure)) – zaquest

+0

Существует несколько тестов в нескольких и я хочу, чтобы этот поток был создан/уничтожен один раз, поэтому 'afterTest' и' afterSuite' не будут работать для меня. Это хорошая мысль. – Depressio

+0

Можете ли вы использовать [исходные наборы] (http://www.gradle.org/docs/current/userguide/userguide_single.html#N11D51)? – zaquest

ответ

3

вы можете использовать afterSuite и проверить набор с нулевым родителем. Это корень свита:

test{ 
    afterSuite{descr, result -> 
     if(desc.parent == null){ 
      //put your logic here 
     } 
    } 
} 

надежда, что помогает,

веселит, Рене

+0

Хорошо работает. Похоже, это удержит меня до Gradle 1.7 с финализаторами. Благодаря! – Depressio

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