FakeItEasy Returning Func with origin arguments 在 C# 中

FakeItEasy Returning Func with origin arguments in C#

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

这是我的想法

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

有人能给我指出正确的方向吗?

我想你在找

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

您可以在文档的 Return Values Calculated at Call Time 主题中看到更多相关信息。