Думаете ли вы о методе испытуемого в 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,

Другие вопросы по тегам