Я преобразовываю некоторые существующие интеграционные тесты устаревшей службы WCF для автоматизации через NUnit. Текущие тесты вызывают развернутую версию службы WCF; то, что я хотел бы сделать, это проверить, что тесты попадают в класс обслуживания (MyService.svc.cs) напрямую/внутренне.Тестирование службы WCF, которая использует олицетворение
Проблема, которую я имею в том, что служба использует олицетворение:
//this is a method in MyService.svc.cs
public SomeObject GetSomeObject()
{
using (GetWindowsIdentity().Impersonate())
{
//do some stuff
}
return null;
}
private WindowsIdentity GetWindowsIdentity()
{
var callerWinIdentity = ServiceSecurityContext.Current.WindowsIdentity;
var cf = new ChannelFactory<IMyService>();
cf.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
return callerWinIdentity;
}
Проблема заключается в том, что ServiceSecurityContext.Current всегда нуль, когда я называю его из модульного тестирования.
Выдача олицетворения важна для последующих операций, поэтому я не могу просто обойти этот код и просто вызвать то, что находится в блоке using
. Возможно, можно будет скомпоновать мой тестовый код в WindowsIdentity.GetCurrent().Impersonate()
и , затем вызывать то, что находится в блоке using
(минуя код MyService.svc.cs), но это было бы менее идеальным, поскольку это не было бы полным завершением -end test.
Мне не нужно подделывать разных пользователей для олицетворения - мне просто нужен контекст пользователя бегуна, который будет доступен в ServiceSecurityContext.Current.
Возможно ли это?