У меня есть набор тестов NUnit, некоторые из которых сбой прерываются, вероятно, из-за проблем с синхронизацией. Я бы хотел найти эти блочные тесты. Есть ли способ повторить каждый тест несколько раз, не добавляя атрибут Repeat() для каждого теста? Мы регулярно используем решайер и ncrunch бегунов, но также имеем доступ к nunit gui и консольным проигрывателям.Выполнение тестов NUnit несколько раз
ответ
NUnit 3
В NUnit 3, вы можете использовать Retry атрибут:
RetryAttribute
используется на методе испытания, чтобы определить, что он должен быть Перекладка, если это не удается, до максимального числа раз.Примечания:
Это не является в настоящее время можно использовать
RetryAttribute
наTestFixture
или любой другой тип набора тестов. Только одиночные тесты могут быть повторены .Если у теста есть непредвиденное исключение, возвращается результат ошибки, и он не повторен. Только ошибки утверждения могут вызвать повторную попытку. К конвертировать неожиданное исключение в отказ утверждения, см.
ThrowsConstraint
.
NUnit 2
NUnit 2 не поддерживает повторные попытки, но вы можете использовать NUnit-повторить плагин (NuGet, GitHub). Пример использования:
private static int run = 0;
...
[Test]
[Retry(Times = 3, RequiredPassCount = 2)]
public void One_Failure_On_Three_Should_Pass()
{
run++;
if (run == 1)
{
Assert.Fail();
}
Assert.Pass();
}
Смотрите также
- Feature - Add 'Retry Attribute' to repeat test upon failure. Обсуждение функции на Launchpad
@Daruisz У меня более 6000 модульных тестов. Есть ли централизованный способ запуска всех тестов несколько раз? –
@PhillipNgan: NUnit-retry позволяет поместить атрибут Retry на любой класс или метод, поэтому ответ - это невозможно сделать с помощью этого инструмента. –
Но если он может быть применен к классу, то * * лучше, чем стандартный NUnit, который разрешает [Repeat] на уровне тестового метода. – demoncodemonkey
Вы можете делать слишком много в каждом модульном тесте - они должны содержать только один тест для одной части вашей системы. Можете ли вы добавить код для подозрительного модульного теста на свой вопрос? –
Hi Piers. Я рад, что тесты не слишком сложны. Более того, тесты по своей сути имеют встроенную синхронизацию (с использованием вычислений DateTime и таймеров и т. Д.). Они проходят большую часть времени и непредсказуемо и спорадически. –