gpt4 book ai didi

c# - 如何在 Moq 的 SetUpSequence 上使用回调?

转载 作者:行者123 更新时间:2023-12-04 12:35:53 26 4
gpt4 key购买 nike

我正在使用 Moq 4.8 版并有一种方法来模拟和断言其参数。我从这个模拟方法开始:

mock.Setup(m => m.Update(It.IsAny<MyClass>))
.Callback((MyClass c) =>
{
// some assertions
})
.Returns(Task.FromResult(updatedClass));
我在这里更新了一个 MyClass 类型的对象并对那个对象做一些断言。这工作得很好。
我刚刚为调用 Update 的方法添加了逻辑如果抛出异常,则重试调用它。所以我想实现一个新的单元测试,它会抛出几次异常然后返回并能够像以前一样进行断言。所以我尝试了 SetupSequence如下:
mock.SetupSequence(m => m.Update(It.IsAny<MyClass>))
.Throws(new Exception("test exception 1"))
.Throws(new Exception("test exception 2"))
.Callback((MyClass c) =>
{
// some assertions
})
.Returns(Task.FromResult(updatedClass));
但是 ISetupSequence不支持 Callback .有没有办法模拟 ThrowsReturns在保持预调用的同时按顺序调用 CallbackReturns ?

最佳答案

您可以使用 MockSequence ,以便您可以在 .Setup() 后添加回调.

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);

关于c# - 如何在 Moq 的 SetUpSequence 上使用回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65030576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com