Думаете ли вы о методе испытуемого в Moq?
Я хочу протестировать метод A моего класса, но без вызова фактического метода B, который обычно вызывается A. Это потому, что B имеет много внешних взаимодействий, которые я пока не хочу тестировать.
Я мог бы создать макеты для всех сервисов, вызываемых B, но это довольно сложная работа. Я предпочел бы просто высмеять B и заставить его возвращать образцы данных.
Это возможно сделать с Moq Framework?
1 ответ
Это с уловом! Вы должны убедиться, что метод B
является виртуальным и может быть переопределено.
Затем установите макет для вызова базовых методов, когда настройка не предоставляется. Затем вы настраиваете B
, но не настраивать A
, Так как A
не был настроен, будет вызвана фактическая реализация.
var myClassMock = new Mock<MyClass>();
myClassMock.Setup(x => x.B()); //mock B
myClassMock.CallBase = true;
MyClass obj = myClassMock.Object;
obj.A(); // will call the actual implementation
obj.B(); // will call the mock implementation
За кулисами Moq будет динамически создавать класс, который расширяет MyClass
и переопределяет B
,