2010-09-14 6 views
0

Я много читал о насмешках, особенно с использованием Rhino Mocks, и узнал, что Rhino Mocks может только имитировать методы интерфейса, которые являются виртуальными или виртуальными методами в конкретных классах. Я прочитал, что причина этого в том, что Rhino mocks не может перехватывать не виртуальные методы, и это то место, где я застрял. Что это означает, перехватывая методы? Как методы перехвата фактически работают в отношении насмешек (в частности, Rhino Mocks)Что такое перехват метода в отношении насмешек?

ответ

1

Основная идея состоит в том, что он создает класс «за кулисами», который переопределяет любые виртуальные или интерфейсные методы и подключает в них «макет» кода ,

Очень упрощенный пример/Обзор

если вы (на основании вашего комментария вопроса)

public EmailHelper 
{ 
    public virtual int SendEmail(MailMessage message) 
    { 
     var server = ConnectToServer(); 
     int statusCode = server.SubmitEmail(message); 
     return statusCode;  
    } 
} 

, а затем в тесте (я забыл синтаксис Rhino для этого, но это достаточно близко)

var mock = Mocks.CreateMockFor<EmailHelper>(); 
Expect.Call(mock.SendEmail).Return(5); 

за кулисами она будет использовать отражение, чтобы загрузить объект SomeClass Type, искать его для реализации интерфейса и виртуальных методов и ген щая скорость класса что-то вроде

public MockEmailHelper 
{ 
    public override int SendEmail(MailMessage message) 
    { 
     return 5; 
    } 
} 

Так как вы можете видеть, когда вы звоните фиктивную версию SendEmail, он не будет подключаться к серверу и т.д., он будет делать то, что вы сказали ей, так что вы можете проверить свой код это зависит от «модуля электронной почты» без фактической отправки электронной почты.

+0

Так насмешливые фреймворки фактически вызывают реализации ваших методов. Выполняет ли это их на самом деле? Например, что, если я издеваюсь над методом электронной почты, отправит ли он электронные письма? – Xaisoft

+0

Нет, вот и все ... так что вы не зависите от внешних систем. Я добавлю больше, чтобы помочь прояснить, удержать .... –

+0

Хорошо спасибо, я буду ждать вашего разъяснения. – Xaisoft

Смежные вопросы