Вам нужно будет смоделировать IPrincipal
для вашего пользовательского объекта, настроить его так, чтобы .IsInRole("Administrator")
вернул true
, а затем настроить fakeContext
на возвращение этого IPrincipal
для .User
имущество. Было бы что-то вроде этого:
РЕДАКТИРОВАТЬ: Оказывается, ОП использует Rhino Mocks, и код, который я предоставил, был для Moq. Вот попытка написать код Rhino, хотя я сам никогда не использовал Rhino. Оригинальный код Moq можно найти ниже.
В Rhino Mocks вам нужно добавить другой вспомогательный метод или изменить текущий, чтобы у вас было следующее:
public static HttpContextBase FakeHttpContext(this MockRepository mocks, string url, IPrincipal user)
{
// Do the same setup as Scott does...
// ...and add this:
SetupResult.For(context.User).Return(user);
mocks.Replay(context);
return context,
}
Затем вы объявляете и настраиваете свой фиктивный объект IPrincipal следующим образом перед вызовом FakeHttpContext
и отправляете фиктивный объект в качестве третьего параметра.
В Мок:
fakeContext = MvcMockHelpers.FakeHttpContext("~/Article/Create");
fakeUser = new Mock<IPrincipal>();
fakeUser.Expect(usr => usr.IsInRole(It.IsAny<String>())).Returns(true);
fakeContext.Expect(context => context.User).Returns(fakeUser.Object);
(Отказ от ответственности: прошло некоторое время с тех пор, как я написал модульный тест, и этот код не был протестирован даже на ошибки компиляции. Следовательно, могут быть некоторые морщины, которые необходимо устранить, прежде чем использовать это код, но вы получите общее представление ...)