如何模拟实现多个接口的类并将模拟对象投射回类类型?



计算器类实现了多个接口。

public class Calculator : IAdd, ISubtract, IMultiply, IDivide
{
...
}

我将如何使用最小起订量模拟这个类,并将 IS 传递给 MyMethod?

public int MyMethod(Calculator calculator)
{
...
}

例如,我嘲笑我,并试图将其转换为计算器,但它变为空。

要直接回答最初的问题,可以按原样嘲笑Calculator

Mock<Calculator> mock = new Mock<Calculator>();

最小起订量允许提取特定的派生类型,以便使用As<T>()进行设置

Mock<IMultiply> multiplyMock = mock.As<IMultiply>();
multiplyMock.Setup(...);
var subject = new MyClass();
subject.MyMethod(mock.Object);

设计明智Calculator我建议从它自己的界面开始。

创建单个接口以聚合功能

public interface ICalculator: IAdd, ISubtract, IMultiply, IDivide {
}

Calculator从中得出

public class Calculator : ICalculator {
//...
}

方法取决于抽象

public int MyMethod(ICalculator calculator) {
//...
}

在测试时,可以根据需要轻松模拟界面。

//Arrange
var calculator = Mock.Of<ICalculator>(); //and configure expected behavior
var subject = new MyClass();
//Act
var result = subject.MyMethod(calculator);

最新更新