我有一個在foreach
循環內多次調用的方法,每次使用相同的參數值。如何使FakeItEasy僞造對象的方法拋出第一次調用並返回第二個?
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()幾次,以確保它在第一次後不會再次拋出異常,但事實並非如預期的那樣。謝謝! –