Я могу дразнить Objectresult <T> Платформы Объекта Используя MOQ

Я использую объект Frameowrk 4.0, и я называю хранимую процедуру, которая возвращает ObjectResult, и я пытался использовать MOQ и не смог дразнить ObjectResult. Кто-либо смог дразнить ObjectResult с помощью moq?

TIA Yaz

5
задан MPelletier 28 August 2010 в 01:57
поделиться

1 ответ

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
    }

}

т.е. Он берет класс (интерфейс), который вы хотите имитировать, и подклассифицирует его (или реализует его в случае интерфейса). Это позволяет ему устанавливать инструменты, которые позволяют ему проверять, был ли вызван метод, или возвращает ли определенное значение (это поддерживает различные методы Setup и Verify). Ограничения этого метода имитации: -

  • Запечатанные классы (не могут быть подклассами)
  • Частные члены (недоступны из подкласса)
  • Методы или классы свойств, которые не являются виртуальными (и поэтому не может быть отменен).

Один из приемов, который вы можете использовать при приближении к запечатанным классам, - это заключить их в какой-то интерфейс, который является Mockable. В качестве альтернативы вы можете попробовать и имитировать интерфейс, который реализует запечатанный класс, который использует только ваш код.

2
ответ дан 14 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: