Дразните IIdentity и IPrincipal

[g0] ПРИМЕЧАНИЕ. Если вы работаете с браузером
list_1=range(0,100)
list_2=range(0,100,5)
final_list=[]
for i in list_1:
    for j in list_2:
        if i==j:
            final_list.append(i)
print(set(final_list))
, вам следует игнорировать этот ответ. Теперь это возможно, как видно из других ответов. [/G0] [g1] Невозможно изменить [f2] в браузере без перезагрузки страницы. URL-адрес представляет собой последнюю загруженную страницу. Если вы измените его ([f3]), он перезагрузит страницу. [/G1] [g2] Одной из очевидных причин является то, что вы пишете сайт на [f4], который выглядит как страница входа в банк. Затем вы изменяете строку URL браузера на [f5]. Пользователь будет совершенно не в курсе, что он действительно смотрит на [f6]. [/G2]
10
задан Jaroslav Urban 2 October 2008 в 14:19
поделиться

2 ответа

Причина, по которой вы получаете ошибку нулевой ссылки, заключается в том, что IPrincipal.Identity имеет значение NULL; он еще не установлен в вашем mocked IPrincipal . Вызов .Name null Identity приводит к вашему исключению.

Как указал Карлтон, ответ состоит в том, чтобы высмеять IIdentity также и настроить его так, чтобы он возвращал "ju" для его свойства Name . Затем вы можете указать IPrincipal.Identity вернуть фиктивный IIdentity .

Вот расширение вашего кода для этого (с использованием Rhino Mocks вместо заглушек):

public void BeforeTest()
{
   mocks = new MockRepository();
   IPrincipal mockPrincipal = mocks.CreateMock<IPrincipal>();
   IIdentity mockIdentity = mocks.CreateMock<IIdentity>();
   ApplicationContext.User = mockPrincipal;
   using (mocks.Record()) 
   {
      Expect.Call(mockPrincipal.IsInRole(Roles.ROLE_MAN_PERSON)).Return(true);
      Expect.Call(mockIdentity.Name).Return("ju"); 
      Expect.Call(mockPrincipal.Identity).Return(mockIdentity);
   }
}
10
ответ дан 3 December 2019 в 23:15
поделиться

Вот код, который я использую для возврата проверочного пользователя (использующий Тупики):

    [SetUp]
    public void Setup()
    {
        var identity = MockRepository.GenerateStub<IIdentity>();
        identity.Stub(p => p.Name).Return("TestUser").Repeat.Any();
        var principal = MockRepository.GenerateStub<IPrincipal>();
        principal.Stub(p => p.Identity).Return(identity).Repeat.Any();

        Thread.CurrentPrincipal = principal;
    }

У меня есть linq в другом коде, таким образом, я использую тип var для переменных; просто замените корректными типами (IPrincipal, IIdentity) в случае необходимости.

4
ответ дан 3 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: