У меня есть метод, который вызывается несколько раз в цикле foreach
, каждый раз с одними и теми же значениями параметров.
foreach (var item in myCollection)
{
// do some stuff with item
// then...
var result = _myService.Foo(aConstant, anotherConstant);
// do something with result
}
Я пытаюсь написать тест, который гарантирует, что цикл продолжает повторяться, даже если _myService.Foo()
выдает исключение в первый раз.
В Moq мне разрешено связывать вызовы Returns
и Throws
следующим образом:
mockService.Setup(x => x.Foo(aConstant, anotherConstant)).Throws<Exception>().Returns(someResult);
Это приведет к тому, что вызов Foo
вызовет исключение, но все последующие вызовы вернут someResult
. Моя главная цель — убедиться, что блок try/catch обернут вокруг второй половины кода внутри моего блока foreach, чтобы цикл продолжался, даже если возникает исключение.
foreach (var item in myCollection)
{
// do some stuff with item
// then...
try
{
var result = _myService.Foo(aConstant, anotherConstant);
// do something with result
}
catch (Exception e)
{
// ignore any exceptions here and continue looping
}
}
Как мне сделать что-то подобное в FakeItEasy? Или есть другая (лучшая) стратегия, которую я мог бы использовать для такого утверждения?
Do()
еще несколько раз, чтобы убедиться, что он не выдает исключение снова после первого раза, но это не так, как ожидалось. Спасибо! 01.11.2013