使用Spring.Mocking时,DSharp.Testing.Mock对应语法的等价写法是什么?
DSharp.Testing.Mock 转 Spring.Mocking 的等价语法
针对你提到的两种DSharp.Testing.Mock用法,Spring.Mocking对应的等价实现如下:
1. 限定返回值的调用次数(对应 WillReturn(1).Exactly(2))
在Spring.Mocking中,需通过Expect.Call定义调用期望,结合Repeat.Times()指定调用次数,再用Return()设置返回值,最后调用Replay()激活Mock:
var myMock = new Mock<IMyTargetInterface>(); // 等价于 DSharp 的 FMyMock.Setup.WillReturn(1).Exactly(2).WhenCalling.... Expect.Call(myMock.Object.TargetMethod()) .Repeat.Times(2) .Return(1); myMock.Replay();
2. 限定自定义逻辑的执行次数(对应 WillExecute.Exactly(2))
如果需要指定方法被调用指定次数时执行自定义逻辑,可使用Do()方法结合Repeat.Times():
var myMock = new Mock<IMyTargetInterface>(); // 等价于 DSharp 的 FMyMock.Setup.WillExecute.Exactly(2).WhenCalling.... Expect.Call(myMock.Object.TargetMethod()) .Repeat.Times(2) .Do(new Action(() => { // 这里编写你的自定义执行逻辑 })); myMock.Replay();
补充说明
Spring.Mocking的Mock工作流程和DSharp略有差异:需要先通过Expect.Call声明期望的调用行为,配置次数、返回/执行逻辑后,必须调用Replay()让Mock切换到"可响应调用"的状态,之后才能使用Mock对象。
内容的提问来源于stack exchange,提问作者pio pio
相关产品推荐
相关产品推荐

