Серьезно ...
иногда DoSomething () работает плохо
Тест должен быть зеленым каждый раз.Если тестируемый код иногда работает «плохо», то вам нужно исправить свой код, изолируя другое поведение.У вас должно быть два теста, один, где он подтверждает правильность при сбое DoSomething (и предполагается, что он потерпит неудачу), и один, где он подтверждает правильность, когда DoSomething в порядке (и должен быть в порядке).в тесте просто неверно ИМО.Вы всегда должны утверждать об ожидаемом результате, и вы должны быть в состоянии изолировать и обработать ваш код так, чтобы он возвращал то, что вы ожидаете.
[Правка - добавлен некоторый код, который можно использовать для цикла повторных попыток]
Вы можете создать оболочку цикла, которая принимает любой метод и вызывает его X раз или до тех пор, пока он не будет успешным.Вы также можете сделать так, чтобы функция Loop вызывала ваш init или передавала его как отдельный аргумент.Метод также может вернуть bool в случае успеха.Измените подпись в соответствии с вашими потребностями.
[TestMethod]
public void something()
{
Loop.LoopMe(TestMethod,3);
Assert.Something();
}
class Loop
{
public static void LoopMe(Action action, int maxRetry)
{
Exception lastException = null;
while (maxRetry > 0)
{
try
{
action();
return;
}
catch (Exception e)
{
lastException = e;
maxRetry--;
}
}
throw lastException;
}
}