2012-02-05 2 views
1

Я хочу написать некоторые модульные тесты для веб-службы, которую я создаю. Проблема заключается в том, что эта служба использует аутентификацию и авторизацию на основе членства и поставщика ролей. И методы внутри службы используют службу ServiceSecurityContext.Current.Identity, чтобы получить доступ к информации о текущем пользователе.Тестирование службы WCF, которая использует IdentityPrincipal

Теперь я не уверен, как я могу проверить такую ​​услугу? Могу ли я каким-то образом высмеять ServiceSecurityContext? Или, может быть, мне нужно просто создать HostedService в моем тестовом проекте и запустить его при запуске теста? Или, может быть, я не должен ее тестировать?

ответ

1

Я бы рекомендовал скрывать это свойство за вашим собственным интерфейсом, чтобы облегчить насмешку и ввести экземпляр этого класса в вашу службу. Это также позволит вам изменить механизм для получения текущего идентификатора, не затрагивая многие файлы кода.

public interface IUserProvider 
{ 
    IIdentity Identity { get; } 
} 

public class UserProvider : IUserProvider 
{ 
    public IIdentity Identity 
    { 
    get { return ServiceSecurityContext.Current.Identity; } 
    } 
} 
+0

К сожалению, это не будет работать, потому что я использую annotions как «[PrincipalPermission (SecurityAction.Demand, роль =„MyRole“)]», чтобы проверить, если пользователь имеет определенную роль, и это значение берется из информация, хранящаяся в текущем потоке. – domderen

+0

Изоляционная среда Моли могут помочь здесь: http://research.microsoft.com/en-us/projects/moles/ – Javi

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