Rhino Mocks - Настройка результатов для не виртуальных методов - PullRequest
1 голос
/ 05 декабря 2008

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

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

У меня есть такой код:

using(mock.Record()){
  SetupResult.For(service.SomeMethod()).Return("hello world");
}

Должен ли метод SomeMethod быть виртуальным, чтобы иметь поддельный результат?

Кроме того, в чем разница между SetupResult.For и Expect.Call?

1 Ответ

4 голосов
/ 05 декабря 2008

Rhino Mocks использует DynamicProxy2, чтобы творить чудеса, поэтому вы не сможете настроить ожидания / результаты для не виртуальных методов.

Что касается разницы между SetupResult.For и Expect.Call, если вы хотите, чтобы ваш тест не прошел проверку, если метод не вызывается, используйте Expect.Call. Если вы просто хотите предоставить результат из своего фиктивного объекта и не хотите проваливать проверку, если он не вызывается, используйте SetupResult.For

Так что следующее не получится:

using(mock.Record()){
    Expect.Call(service.SomeMethod()).Return("you have to run me");
}

using(mock.Replay()){
    // Some code that never calls service.SomeMethod()
}

И этот тест не будет:

using(mock.Record()){
    SetupResult.For(service.SomeMethod()).Return("you don't have to run me");
}

using(mock.Replay()) {
    // Some code that never calls service.SomeMethod()
}

Имеет ли это смысл?

...