[英]How to verify static method call using Moq
使用这种方法我已经让我的静态方法调用一个Action
,希望我可以在我的Moq单元测试中设置和验证调用。
正在测试的代码是:
public Action<Data> Calculate = x => CalculatorHelper.Calculate(x);
public void CalculateData(Data data)
{
...
Calculate(data);
...
}
测试是:
[Test]
public void CalculateIsCalled()
{
_mockService.Setup(x => x.Calculate = CalculatorHelper.Calculate)
.Verifiable();
...
_mockService.VerifyAll();
}
但是, Setup()
的参数抛出编译错误“表达式树不能包含赋值运算符”。
显然代码x => x.Calculate = CalculatorHelper.Calculate
是不正确的但是正确的编码方式是什么?
Calculate
应该返回一个指向CalculatorHelper.Calculate
的新Action,所以它应该是:
_mockService.Setup(x => x.Calculate).Returns(CalculatorHelper.Calculate)
.Verifiable();
但是,要使其工作, Calculate
需要是一个virtual
属性,而不仅仅是一个字段。
考虑到Calculate
是公共字段这一事实,你甚至不需要Moq(也假设你正在测试CalculateData
调用委托):
Data passedAsActionParameter = null;
var testedClass = new Calculator();
testedClass.Calculate = d => { passedAsActionParameter = d; };
var data = new Data();
testedClass.CalculateData(data);
Assert.That(passedAsActionParameter, Is.EqualTo(data));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.