Установите результат для составной части макета - PullRequest
0 голосов
/ 19 декабря 2011

Мы пытаемся смоделировать HttpContext приложения MVC 3, используя RhinoMocks. Выглядит так:

HttpContextBase context = mocks.StrictMock<HttpContextBase>();
HttpRequestBase request = mocks.PartialMock<HttpRequestBase>();
IPrincipal user = mocks.StrictMock<IPrincipal>(); 
HttpCookieCollection cookies = new HttpCookieCollection();
IIdentity identity = mocks.StrictMock<IIdentity>();
HttpResponseBase response = mocks.PartialMock<HttpResponseBase>();

SetupResult.For(response.Cookies).Return(cookies);
SetupResult.For(context.User).Return(user);
SetupResult.For(user.Identity).Return(identity);
SetupResult.For(context.Request).Return(request);
SetupResult.For(context.Response).Return(response);
mocks.Replay(context);

В моем тесте мне нужно, чтобы пользователь прошел аутентификацию, поэтому я добавил следующее:

var identity = context.User.Identity;
mocks.BackToRecord(identity);
SetupResult.For(identity.IsAuthenticated).Return(true).Repeat.Any();
mocks.Replay(identity);

Это, однако, приводит к «Результат для IIdentity.get_IsAuthenticated (); уже настроен».исключение будет брошено.

Почему?Что мне нужно сделать, чтобы установить аутентификацию в моих тестах?

1 Ответ

0 голосов
/ 20 декабря 2011

Прошло много времени с тех пор, как я использовал семантику записи / воспроизведения по сравнению с синтаксисом AAA (Arrange / Act / Assert), но попробуйте выполнить SetupResult только для макета идентификации:

mocks.BackToRecord(identity);
SetupResult.For(identity.IsAuthenticated).Return(true).Repeat.Any();
mocks.Replay(identity);

НОВЫЙ ОТВЕТ

Избавьтесь от .Repeat.Any().Я думаю, так как это свойство, вам просто нужно установить возвращаемое значение.Rhino.Mocks всегда будет возвращать это значение - вам не нужно повторять его.Я сделал быстрый тест и получил ту же ошибку, что и вы, но как только я удалил .Repeat.Any(), все заработало.

...