我有一个看起来像这样的模拟方法:
class NotMineClass {
T Execute(Func operation)
{
// do something
return operation();
}
}
在我的代码中,我这样做:
public MyType MyMethod()
{
MyType object = new MyType();
bool success = notMineClassInstance.Execute(() =>
{
// some things
retVal = injectedObject1.method();
object.attribute = injectedObject2.method();
// some other things
return retVal;
}
if (success)
{
object.otherAttribute = someValue;
}
return object;
}
我的情况是,我正在使用 Moq 测试 MyMethod,并且我想验证 Func 行为是否符合预期。我在它的主体中有一些注入的对象,它们是模拟的,应该被验证;它也开始构建我的返回值,所以我不能做任何断言,除非我调用作为参数传递的函数。
在 Java 和 jUnit + EasyMock 中,我会捕获传递的参数,如下所示:
public void testMyMethod() {
// ...
Capture < Function < void, Boolean > > functionCapture = Captures.last();
expect(notMineClassInstance.execute(EasyMock.capture(functionCapture)));
// Expectations for the body of the function
replay();
functionCapture.getValue().apply(null);
}
如何使用 C# + Moq 做同样的事情?