Расширение на Ответ Ли ,
Вам не нужно делать все методы и свойства вашего класса виртуальными, только те, которые вы хотите высмеять.
Кроме того, следует отметить, что вы должны насмехаться над конкретной реализацией вашего класса.
var mock = new Mock<YourTestClass>(); // vs. var mock = new Mock<IYourTestInterface>();
Если ваш класс не имеет конструктора по умолчанию, вам также нужно будет указать аргументы для передачи ему через:
var mock = new Mock<YourTestClass>(x, y, z);
// or
var mock = new Mock<YourTestClass>(MockBehavior.Default, x, y, z);
Где x, y, z
- первый, второй и третий параметры вашего конструктора соответственно.
И, наконец, если метод, который вы ищете, защищен, вам нужно будет включить Moq.Protected
using Moq.Protected;
TReturnType returnValue = default(TReturnType);
mock.Protected()
.Setup<TReturnType>("YourMockMethodName", It.IsAny<int>()) // methodname followed by arguments
.Returns(returnValue);