C# 如何在Moq和x27上使用回调;设置顺序?
我使用的是moqversion4.8,有一个方法来模拟和断言它的参数。我从这个模拟的方法开始:C# 如何在Moq和x27上使用回调;设置顺序?,c#,mocking,moq,C#,Mocking,Moq,我使用的是moqversion4.8,有一个方法来模拟和断言它的参数。我从这个模拟的方法开始: mock.Setup(m=>m.Update(It.IsAny)) .Callback((MyClass c)=> { //一些断言 }) .Returns(Task.FromResult(updatedClass)); 在这里,我更新了一个类型为MyClass的对象,并对该对象进行了大量断言。这个很好用 我刚刚为调用Update的方法添加了逻辑,以便在抛出异常时重试调用它。所以我想实现一个新的单元
mock.Setup(m=>m.Update(It.IsAny))
.Callback((MyClass c)=>
{
//一些断言
})
.Returns(Task.FromResult(updatedClass));
在这里,我更新了一个类型为MyClass
的对象,并对该对象进行了大量断言。这个很好用
我刚刚为调用Update
的方法添加了逻辑,以便在抛出异常时重试调用它。所以我想实现一个新的单元测试,它抛出几次异常,然后返回,并能够像以前一样进行断言。因此,我尝试了SetupSequence
,如下所示:
mock.SetupSequence(m=>m.Update(It.IsAny))
.Throws(新异常(“测试异常1”))
.Throws(新异常(“测试异常2”))
.Callback((MyClass c)=>
{
//一些断言
})
.Returns(Task.FromResult(updatedClass));
但是
ISetupSequence
不支持回调
。有没有一种方法可以模拟抛出
和返回
调用,同时保持对返回
的预调用回调
?目前我一直在做这项工作:
int callCount=0;
mock.Setup(m=>m.Update(It.IsAny))
.Callback((MyClass c)=>
{
callCount++;
if(callCount您可以使用,这样您就可以在.Setup()
之后添加回调
var mock=new mock(MockBehavior.Strict);
var sequence=新的MockSequence();
_fooService.InSequence(sequence).Setup(x=>x.footMethod(a)).ReturnsAsync(b);
_InSequence(sequence).Setup(x=>x.BarMethod(c)).ReturnsAsync(d);
_InSequence(sequence).Setup(x=>x.BazMethod(e)).ReturnsAsync(f);
您可以在Moq存储库中查看这个问题。也可以在。不确定它是否更优雅,因为它是基于意见的链接,它们很有用。还重新编写了问题,使其不那么基于意见。我的工作对我来说就像是一个黑客,这就是为什么我在寻找更好的方法。您检查了吗?尽管您可以l.Setup
在一个插入序列上,你不能调用.Throw
或.Callback
,这就是我要找的。
var mock = new Mock<IFoo>(MockBehavior.Strict);
var sequence = new MockSequence();
_fooService.InSequence(sequence).Setup(x => x.FooMethod(a)).ReturnsAsync(b);
_barService.InSequence(sequence).Setup(x => x.BarMethod(c)).ReturnsAsync(d);
_bazService.InSequence(sequence).Setup(x => x.BazMethod(e)).ReturnsAsync(f);