Rhino имитирует вызов функции, над которой издеваются

#rhino-mocks

#rhino-издевается

Вопрос:

Попытка издеваться над функцией с помощью RhinoMock.

 var repository = new Rhino.Mocks.MockRepository();
var classMock = repository.DynamicMock<Customer>();
Expect.Call(classMock.getCustomerAge("john")).Return(12);
  

Проблема в том, что в ожидаемом.Строка вызова на самом деле вызывает функцию, которую она должна издеваться. Я делаю что-то не так? Разве цель издевательства не в том, что вам не нужно запускать фактическую функцию?

 public class AgeProvider
{
    private static Service _Service;
    private static string _User;

    public AgeProvider()
    {
    }

    public AgeProvider(ISession session, string authenticatedUser)
    {
        _Service = new Service(session);
        _user = authenticatedUser;
    }

    public int getCustomerAge(string userToSearch)
    {
        var user = _Service.FindUser(_user, userToSearch);

        return user.age;
    }

}
  

Упростил класс, где функция — это то, что я пытаюсь издеваться.

Ответ №1:

является ли метод виртуальным? Я думаю, вам также нужно использовать частичный макет, если вы издеваетесь над классом, а не над интерфейсом.

Комментарии:

1. можете ли вы обновить вопрос определением класса customer?

2. Добавлен упрощенный класс к вопросу.

3. Спасибо. Поскольку этот метод не является виртуальным, Rhino не сможет издеваться над ним как есть, что, я думаю, является вашей проблемой.

Ответ №2:

Вероятно, это потому, что вы используете более старую семантику записи / воспроизведения. Вместо этого используйте новый стиль AAA (Arrange / Act / Assert):

 classMock.Stub(r => r.getCustomerAge("john")).Return(12);
  

Комментарии:

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