2015-12-03 3 views
0

У меня есть модульные тесты для моих услуг. Я использовал Azure Active Directory для аутентификации. Теперь при передаче сеансов с использованием MockHttpRequest я получаю исключение как Unable to cast object of type 'ServiceStack.AuthUserSession' to type 'AadAuthSession'. Вот мой код в классе Testbase.Прохождение сеанса в модульном тесте

IAuthSession session = new AadAuthSession(); 
     session.UserName = "Author"; 
     appHost.Plugins.Add(new AuthFeature(() => session, 
      new IAuthProvider[] { 
       new AadAuthProvider(appHost.AppSettings), 
      } 
    )); 

Мне что-то не хватает. Как его правильно направить?

public TestBase() 
    { 
     appHost = new TestAppHost().Init(); 
     appHost.TestMode = true; 
     appHost.AppSettings = new AppSettings(); 
     appHost.Container.Register<IDbConnectionFactory>(
      new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider)); 
     appHost.Container.Register<ICacheClient>(new MemoryCacheClient()); 

     IAuthSession session = new AadAuthSession(); 
     appHost.Container.Register<IAuthSession>(c => session); 
     session.UserName = "Author"; 
     appHost.Plugins.Add(new AuthFeature(() => session, 
      new IAuthProvider[] { 
       new AadAuthProvider(appHost.AppSettings), 
      } 
     )); 

    } 

ответ

2

Вы можете дразнить сессии с помощью МОК, если вы установите AppHost в TestMode с:

SetConfig(new HostConfig { TestMode = true }); 

Который позволит вам зарегистрировать сеанс, который получает возвращаемый при запросе сеанса, а именно:

IAuthSession session = new AadAuthSession(); 
container.Register<IAuthSession>(c => session); 

Другой способ издеваться сеанс должен зарегистрировать его в IRequest.Items, например:

req.Items[SessionFeature.RequestItemsSessionKey] = session; 
+0

Я использую первый вариант издевательств сессии в IOC и устанавливаю TestMode = true, все еще получая ту же ошибку. Есть ли какой-либо тип, который отсутствует или требуется. Я обновил свой код. взгляните на сообщение .. – Lara

+0

@ Lara вы используете последнюю версию ServiceStack версии 4.0. если да, то что такое StackTrace? MockHttpRequest может потребовать от вас наследовать от AuthUserSession. – mythz

+0

Я добавил необходимый код для 'MockHttpRequest()', пожалуйста, взгляните на мое обновленное сообщение и сообщите мне, что нужно добавить ... – Lara

Смежные вопросы