ObjectResult ( в соответствии с документами MSDN ) является запечатанным классом, так что его нельзя издеваться. Работа с библиотеками Mocking, такими как Moq, заключается в том, что когда вы делаете что-то вроде
Mock<Foo> fooMock = new Mock<Foo>();
Он генерирует (используя Reflection.Emit и другие магические трюки) класс, который выглядит примерно так
public class FooMockingProxy : Foo {
public override void This() {
// Mocking interceptors to support Verify and Setup
}
public override string That() {
// Mocking interceptors to support Verify and Setup
}
}
т.е. Он берет класс (интерфейс), который вы хотите Mock и подклассы его (или реализует его в случае интерфейса). Это позволяет ему использовать инструментарий, который позволяет ему проверять, был ли вызван метод, или возвращает определенное значение (это поддерживает различные методы Setup и Verify). Ограничения к этому методу насмешек: -
- Запечатанные классы (не могут быть разделены на подклассы)
- Частные участники (не могут быть доступны из подкласса)
- Методы или классы свойств, которые не являются виртуальными (и поэтому не могут быть переопределены).
Одна из техник, которую вы можете использовать при приближении к закрытым классам, - это обернуть их в какой-нибудь интерфейс, который можно использовать для моделирования. В качестве альтернативы вы можете попробовать Mock интерфейса, который реализует запечатанный класс, который потребляет только ваш код.