Как использовать Rhino.Mocks для оценки свойств класса (геттеры и сеттеры) - PullRequest
2 голосов
/ 27 марта 2011

Я изучаю, как работает Rhino.Mocks, и пытаюсь понять, как я могу вручную установить значение в классе Property.

Я видел пример в Интернете, где вы указали только свойство в качестве аргумента Expect.Call () вместо использования метода.

MockRepository mocks = new MockRepository(); 
Person p = mocks.StrictMock<Person>();
Expect.Call(p.FirstName).Return("John");

Человек - это такой класс, как:

public class Person
{
   public string FirstName {get;set;}
}

Я всегда получаю сообщение об ошибке:

Неверный звонок, последний звонок был использовался или не был сделан звонок (сделать уверен, что вы звоните виртуальный (C #) / переопределяемый (VB) метод).

Я что-то упустил? Можно ли вручную установить свойства класса и оценить их, чтобы увидеть, нормально ли работают геттеры и сеттеры?

1 Ответ

8 голосов
/ 27 марта 2011

Как и в любой фреймворковой среде, Rhino Mocks может только макетировать интерфейсы или классы, которые определяют виртуальные методы и свойства.

Это потому, что при реализации класса Rhino создает производный класс из указанного вами, заменяя каждыйvirtual (или Overridable в VB) метод с реализацией заглушки, который использует перехватчик для обработки вызова.

Когда вы указываете не виртуальный метод, Rhino не может создать оболочку.

Это также верно для sealed (NonInheritable в VB) классов.

Таким образом, чтобы ваш класс работал, вы должны реализовать это свойство следующим образом:

public class Person
{
    public virtual string FirstName { get; set; }
}

Таким образом, Rhino может соответственно переопределить poperty.

...