Я использую объект Frameowrk 4.0, и я называю хранимую процедуру, которая возвращает ObjectResult, и я пытался использовать MOQ и не смог дразнить ObjectResult. Кто-либо смог дразнить ObjectResult с помощью moq?
TIA Yaz
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. В качестве альтернативы вы можете попробовать и имитировать интерфейс, который реализует запечатанный класс, который использует только ваш код.