Подтвердить что ты не робот

Вымыть метод испытуемого в Moq?

Я хочу проверить метод A моего класса, но не вызывать фактический метод B, который обычно вызывается A. Это потому, что B имеет много внешних взаимодействий, которые я не хочу тестировать сейчас.

Я мог бы создавать mocks для всех сервисов, называемых B, но это довольно некоторая работа. Я предпочел бы просто издеваться над B и заставить его возвращать данные образца.

Возможно ли это с каркасом Moq?

4b9b3361

Ответ 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.