我有一个要模拟的界面
capnp compile
我的被测试代码依次调用Bar()几次。我想定义我的单元测试,以便Bar在第二次(或第N次)调用时引发异常。有一种简洁的方法吗?我找到了非无效方法的示例:http://nsubstitute.github.io/help/multiple-returns/
答案 0 :(得分:1)
无效呼叫的回调
Returns()
可用于获取返回值的成员的回调,但是对于void
成员,我们需要另一种技术,因为我们无法在void
上调用方法返回。对于这些情况,我们可以使用When..Do
语法。用于更复杂的回调的回调构建器
Callback
构建器使我们可以创建更复杂的Do()
方案。我们可以使用Callback.First()
后跟Then()
,ThenThrow()
和ThenKeepDoing()
来构建回调链。我们还可以使用Always()
和AlwaysThrow()
来指定每次调用的回调。请注意,即使其他回调会引发异常,也会调用Always()
方法设置的回调。
因此对于您的情况,您可以设置类似的替代物
var foo = Substitute.For<IFoo>();
foo
.When(_ => _.Bar(Arg.Any<IEnumerable<int>>()))
.Do(Callback
.First(_ => _)//First time do nothing
.ThenThrow(new Exception()) //second time throw the provided exception
);