Чтобы непосредственно ответить на первоначальный вопрос, класс Calculator
можно смоделировать как
Mock<Calculator> mock = new Mock<Calculator>();
Moq позволяет извлекать определенные c производные типы для установки с использованием 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);