Тайм-аут для индивидуальных тестов в NUnit - PullRequest
18 голосов
/ 05 января 2011

У меня следующая проблема: я знаю, что в NUnit есть атрибут Timeout.Моя проблема в том, что модульные тесты на самом деле порождают новый процесс, который в случае зависания никогда не убивается NUnit.Как я могу реализовать тайм-аут, который фактически избавит от мошеннического процесса?

Спасибо, Р.

Ответы [ 4 ]

14 голосов
/ 05 января 2011

Вы можете использовать тайм-аут для подтверждения вместо тайм-аута для всего метода теста:

Assert.That(actual, Is.EqualTo(expected).After(5000, 50));
5 голосов
/ 05 января 2011

Редактировать: Принятый ответ лучше.

Если время вашего теста истекло (хотя и позже, чем вы надеетесь), вы всегда можете использовать атрибут MaxTime: http://www.nunit.org/index.php?p=maxtime&r=2.5.1 и очистите поток самостоятельно:

[Test, Maxtime(2000)]
public void TimedTest()
{
    ...
}

В противном случае лучшим вариантом может быть реализация собственного механизма синхронизации.Используйте таймер (или занятый цикл while), и если превышено время ожидания, завершите процесс (возможно, в методе ShutDown, если он является общим для всех тестов) и произойдет сбой сигнала.

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

2 голосов
/ 25 февраля 2015
[Test, Timeout(2000)]
public void PotentiallyLongRunningTest()
{
    ...
}

http://www.nunit.org/index.php?p=timeout&r=2.5.1:

TimeoutAttribute используется для указания значения времени ожидания в миллисекундах для тестового случая. Если тестовый случай выполняется дольше указанного времени, он немедленно отменяется и сообщается как сбой с сообщением о превышении времени ожидания.

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

0 голосов
/ 10 января 2011

OK.После того, как я попробовал все функции, встроенные в NUnit, и не смог достичь того, что мне было нужно, я сделал следующее: я добавил таймер, который устанавливается в функции с атрибутом [SetUp] на уровне фиксации и, таким образом, вызывается передкаждый тест.Если таймер срабатывает до завершения теста, я просто выполняю очистку в обратном вызове таймера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...