首页 > 解决方案 > FakeItEasy 在 C# 中返回具有原始参数的 Func

问题描述

我尝试使用 FakeItEasy 运行一些测试,我的目的是用另一种方法替换一种方法以获得不同的返回值。对我来说棘手的事情是将源调用参数重定向到替换方法。调用工作正常,但不改变结果。(我可以做错什么吗)

这是我想出的

Func<string, string> func = delegate (string request)
{
   return $"Replaced {request}";
};
var service = A.Fake<MyService>();

A.CallTo(() => service.DoAction(A<string>._)).Returns<string>(func(A<string>._));
// func(A<string>._) cause an exception, i need to have arg from DoAction here

// following line works fine but dont change return
A.CallTo(() => service.DoAction(A<string>._)).Invokes((string request) => func(request));

// result is empty here but should have "Replaced Test"
var result = service.DoAction("Test");

有人可以指出我正确的方向吗?

标签: c#fakeiteasy

解决方案


我想你正在寻找

A.CallTo(() => service.DoAction(A<string>._)) 
    .ReturnsLazily((string request) => func(request));

您可以在文档的“调用时计算的返回值”主题中了解更多信息。


推荐阅读