作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试模拟正在测试的类,以便在测试它们时可以调用各个方法。这将允许我仅将方法设置测试为调用库,并且从测试方法中调用的所有其他方法(同一类)将被模拟。
但是,对于不返回值的方法,我无法执行此操作。对于不返回值的方法,智能感知只是不显示调用库的选项。
这可能吗?
服务等级:
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;
fakeService.Setup(x => x.GetReference(It.IsAny<int>())).CallBase();
fakeService.Setup(x => x.StartProcess()).CallBase();
最佳答案
首先,您的模拟将不起作用,因为 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/
我是一名优秀的程序员,十分优秀!