Dig*_*ift 4 c# linq unit-testing moq
使用这种方法我已经使我的静态方法调用了一个Action希望我可以在我的Moq单元测试中设置和验证调用.
正在测试的代码是:
public Action<Data> Calculate = x => CalculatorHelper.Calculate(x);
public void CalculateData(Data data)
{
...
Calculate(data);
...
}
Run Code Online (Sandbox Code Playgroud)
测试是:
[Test]
public void CalculateIsCalled()
{
_mockService.Setup(x => x.Calculate = CalculatorHelper.Calculate)
.Verifiable();
...
_mockService.VerifyAll();
}
Run Code Online (Sandbox Code Playgroud)
但是,Setup()抛出编译错误的参数"表达式树不能包含赋值运算符".
显然代码x => x.Calculate = CalculatorHelper.Calculate不正确但是正确的编码方式是什么?
Calculate应该返回一个指向的新Action CalculatorHelper.Calculate,所以它应该是:
_mockService.Setup(x => x.Calculate).Returns(CalculatorHelper.Calculate)
.Verifiable();
Run Code Online (Sandbox Code Playgroud)
但是,要实现这一目标,Calculate需要成为virtual财产,而不仅仅是一个领域.