gpt4 book ai didi

c# - 在模拟方法(Moq)中更改引用参数的值

转载 作者:太空狗 更新时间:2023-10-29 22:36:33 26 4
gpt4 key购买 nike

当在另一个方法中创建参数时,如何设置 Moq 以更改内部方法参数的值。例如(下面的简化代码):

public class Response
{
public bool Success { get; set; }
public string[] Messages {get; set;}
}

public class MyBusinessLogic
{
public void Apply(Response response);
}


public class MyService
{
private readonly MyBusinessLogic _businessLogic;

....

public Response Insert()
{
var response = new Response(); // Creates the response inside here
_businessLogic.Apply(response);

if (response.Success)
{
// Do more stuff
}
}
}

假设我想对 Insert() 方法进行单元测试。我如何设置业务逻辑的 Apply() 方法的模拟以接收任何 Response 类,并让它填充返回的 Response 对象并将 Success 设置为 true,以便其余代码可以运行。

顺便说一句,我已将 Apply() 方法的返回类型更改为 bool(而不是 Void),以使 Moq 仅返回 true,类似于以下内容:

mockMyBusinessLogic.Setup(x => x.Apply(It.IsAny<Response>()).Returns(true);

但是让一个方法做某事并返回一些东西感觉很尴尬(我更喜欢让方法只做一个或另一个)。

希望有一种看起来像下面的“东西”的方式(使用 void 时):

mockMyBusinessLogic.Setup(
x => x.Apply(It.IsAny<Response>()).Callback(()
=> new Response { Success = true });

最佳答案

您可以使用 Callback<T>(Action<T>) 访问传递给模拟调用的参数方法:

mockMyBusinessLogic
.Setup(x => x.Apply(It.IsAny<Response>())
.Callback<Response>(r => r.Success = true);

关于c# - 在模拟方法(Moq)中更改引用参数的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34112846/

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