2013-03-07 2 views
3

Я хочу что-то проверить, скажем 5 секунд, а затем сдать тест, если ничего неправильного не было заявлено. Возможно ли это с аннотациями? Может быть что-то вроде @Test(uptime=5000)?Запуск junit test определенное время

ответ

7

Пересмотренный ответ после того, как вопрос был отредактирован

Фундаментально он чувствует, как вы тестируете неправильные вещи здесь - это кажется очень странным «ничего не происходит», чтобы быть признаком успеха.

Если вы хотите, чтобы доказать, что ваш алгоритм может работать в течение определенного периода времени без сбоев, я бы на самом деле извлечь из один цикл, а затем написать тест что-то вроде:

@Test 
public void fineForFiveSeconds() { 
    long start = System.nanoTime(); 
    long end = start + TimeUnit.SECONDS.toNanos(5); 
    while (System.nanoTime < end()) { 
     test.executeOneIteration(); 
    } 
} 

Таким образом, вы не имеют отдельный поток, который должен убить рабочий код и т.д.

Оригинальный ответ

Этот ответ был написан до вопрос указал, что время выхода было признаком успеха, а не неудачи.

Я думаю, что вы просто хотите атрибут timeout в @Test аннотацию:

@Test(timeout = 5000) 

с документацией:

Необязательно указывать таймаут в миллисекундах, чтобы вызвать метод испытания на провал, если она занимает больше времени, чем это количество миллисекунд.

+0

Просто для выяснения, это просто не проходит тест, поток, в котором работает метод тестирования, все еще работает, пока JVM не остановится, конечно. –

+0

Я не очень хорошо себя объяснил. Я хочу запустить определенное количество времени, и если ничего не произойдет, пройдите тест. – dinigo

+1

@ demil133: Это очень странное требование - полная противоположность тому, что я обычно ожидаю. Обычно код, не завершающийся во времени, является признаком * failure *, а не успехом. Вы действительно хотите, чтобы реализация 'while (true) {}' была успешной? –

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