У меня есть код, который использует MoQ для создания частичной заглушки.Я бы предпочел взаимодействовать с интерфейсом, а не с конкретной реализацией, чтобы мне не пришлось изменять модульный тест, если у меня другая реализация интерфейса.
Так, например, у меня есть фабричный метод, такой как:
private Mock<ISomeInterface> ISomeInterfaceStubFactory()
{
return new Mock<SomeConcreteImplementation>();
}
Вот код, который вызывает метод:
var partialStub = ISomeInterfaceStubFactory();
partialStub.Setup(m => m.MethodToStubOutThatMethodToTestCalls(It.IsAny<string>())).Returns(new List<SomeOtherObject>());
partialStub.CallBase = true;
var actualResult= partialStub.Object.MethodToTest();
Assert.That(actualResult, Is.EqualTo(expectedResult));
Проблема в том,при этом ISomeInterfaceStubFactory не будет компилироваться.Таким образом, я изменил это, чтобы быть как ниже, но выполнение этого, кажется, ломает частичную заглушку.Реализована фактическая реализованная операция MethodToStubOutThatMethodToTestCalls
, а не версия с заглушкой.В основном я пытаюсь использовать полиморфизм с объектом-заглушкой.Есть какой-либо способ сделать это?Мне бы хотелось, чтобы мой модульный тест не был тесно связан с конкретной реализацией.
private Mock<ISomeInterface> ISomeInterfaceStubFactory()
{
return new Mock<SomeConcreteImplementation>.As<ISomeInterface>();
}