如何使用Moq验证静态方法调用

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不正确但是正确的编码方式是什么?

Dan*_*rth 7

Calculate应该返回一个指向的新Action CalculatorHelper.Calculate,所以它应该是:

_mockService.Setup(x => x.Calculate).Returns(CalculatorHelper.Calculate)
            .Verifiable();
Run Code Online (Sandbox Code Playgroud)

但是,要实现这一目标,Calculate需要成为virtual财产,而不仅仅是一个领域.