gpt4 book ai didi

c# - 基于对同一模拟对象的早期 void 方法调用定义模拟响应

转载 作者:行者123 更新时间:2023-12-05 00:08:30 25 4
gpt4 key购买 nike

这是我要模拟的类,被大量截断了。

public class FooHandler
{
private FooInstance foo;

public void ConstructInstance(string fooSpecs)
{
foo = SomeMethod(fooSpecs);
}

public string GetSomeProperty()
{
return foo.SomeProperty();
}
}

实际上每个方法都有很多内部逻辑。这只是想法。

我要测试的代码需要一个 FooHandler,它会依次调用这两个方法。

我想模拟我的 FooHandler 以测试我的代码是否正确调用它。

var mockedFooHandler = new Mock<FooHandler>();
mockedFooHandler.Setup(x => x.ConstructInstance(EXAMPLE_FOO_SPEC));
mockedFooHandler.Setup(x => x.GetSomeProperty()).Returns(EXPECTED_PROPERTY);

现在,我想将这两个设置结合在一起。如果使用不同的 EXAMPLE_FOO_SPEC 调用了第一个方法,我想返回不同的 EXPECTED_PROPERTY。第一个方法是 void,第二个方法不带参数。所以我有点想设置模拟对象的内部状态,就像真实对象那样。但国家是私有(private)的。

制作几个不同的 mockedFooHandlers 并用它们自己的编程响应在不同的地方注入(inject)是不可能的。

我应该怎么做?

最佳答案

对于 void 方法,可以使用 Verify 来验证方法是否以某种方式被调用。示例:

_mockedInstance.Verify(x => x.Method(expectedParameter), Times.Once);

如果该方法未按预期调用,则验证将抛出异常,从而导致测试失败。这应该在测试结束时调用,您通常会在测试结束时断言结果。

https://github.com/Moq/moq4/wiki/Quickstart#verification

关于c# - 基于对同一模拟对象的早期 void 方法调用定义模拟响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60549282/

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