gpt4 book ai didi

unit-testing - 不返回值的方法的最小起订量调用库(void 方法)

转载 作者:行者123 更新时间:2023-12-04 04:18:18 25 4
gpt4 key购买 nike

我正在尝试模拟正在测试的类,以便在测试它们时可以调用各个方法。这将允许我仅将方法设置测试为调用库,并且从测试方法中调用的所有其他方法(同一类)将被模拟。

但是,对于不返回值的方法,我无法执行此操作。对于不返回值的方法,智能感知只是不显示调用库的选项。

这可能吗?

服务等级:

public class Service
{
public Service()
{
}

public virtual void StartProcess()
{
//do some work
string ref = GetReference(id);
//do more work
SendReport();
}

public virtual string GetReference(int id)
{
//...
}

public virtual void SendReport()
{
//...
}
}

测试类设置:
var fakeService = new Mock<Service>();
fakeService.Setup(x => x.StartProcess());
fakeService.Setup(x => x.GetReference(It.IsAny<int>())).Returns(string.Empty);
fakeService.Setup(x => SendReport());
fakeService.CallBase = true;

现在在我测试 GetReference 的测试方法中,我可以这样做:
fakeService.Setup(x => x.GetReference(It.IsAny<int>())).CallBase();

但是当我想对 StartProcess 做同样的事情时,.CallBase 不存在:
fakeService.Setup(x => x.StartProcess()).CallBase();

一旦我使方法返回一些东西,例如 bool 值,它就变得可用。

最佳答案

首先,您的模拟将不起作用,因为 Service 上的方法类不是 virtual .在这种情况下,Moq 无法拦截调用以插入其自己的模拟逻辑(有关详细信息,请查看 here)。

设置mock.CallBase = true指示 Moq 委托(delegate)任何与显式 Setup 不匹配的调用调用它的基本实现。删除 fakeService.Setup(x => x.StartProcess());调用以便 Moq 可以调用基本实现。

关于unit-testing - 不返回值的方法的最小起订量调用库(void 方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649279/

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