gpt4 book ai didi

c# - 在 RhinoMocks 中模拟 void 函数的正确方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 20:25:40 24 4
gpt4 key购买 nike

我有这个接口(interface),它在我想模拟的某些函数中返回 void 并想知道这样做的正确方法是什么。截至目前,我有以下内容:

var mocks = new MockRepository();
var mockedInterface = mocks.CreateMock<IMyInterface>();
Expect.Call(mockedInterface.FunctionThatReturn(param1, param2)).Return(Something);
mockedInterface.FunctionReturningVoid(param3, param4);
mocks.ReplayAll();

// Some assert and other stuff
mocks.VerifyAll();

这是正确的做法吗?我认为这看起来很奇怪,因为您没有以相同的方式处理这两个功能。我想写的是:

var mocks = new MockRepository();
var mockedInterface = mocks.CreateMock<IMyInterface>();
Expect.Call(mockedInterface.FunctionThatReturn(param1, param2)).Return(Something);
Expect.Call(mockedInterface.FunctionReturningVoid(param3, param4)); // This doesn't work.
mocks.ReplayAll();

// Some assert and other stuff
mocks.VerifyAll();

但这对第 4 行不起作用。我发现一些博客说你可以像这样使用 lambdas(或委托(delegate))

Expect.Call(() => mockedInterface.FunctionReturningVoid(param3, param4)); // This doesn't work.

但这似乎对我也不起作用。使用 Expect.Call 可以轻松识别模拟函数,这就是我想要它的原因。我得到的编译错误是:“无法将 lambda 表达式转换为类型‘object’,因为它不是委托(delegate)类型”。

那么应该怎么做呢?

更新: 添加了编译错误信息。

最佳答案

我更喜欢 AAA(安排/行动/断言)语法而不是记录/重播。它更直接,使测试更易于阅读。你要做的是:

// arrange
var mock = MockRepository.GenerateMock<IMyInterface>
mock.Expect(i => i.FunctionThatReturnSomething(param1, param2)).Return("hello");
mock.Expect(i => i.FunctionThatReturnVoid(param3, param4));
// set up other stuff for your code (like whatever code depends on IMyInterface)
var foo = new Foo(mock);

// act
foo.DoSomething();

// assert
mock.VerifyAll();

关于c# - 在 RhinoMocks 中模拟 void 函数的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4604069/

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