Я использую NUnit и Moq для тестирования класса, который использует универсальную оболочку клиента службы WCF Я написал , и я столкнулся с ошибкой, которую не могу понять. У меня есть следующий интерфейс:
public interface IService
{
void Call();
}
... реализовано следующим сервисным клиентом:
public class ServiceClient : ClientBase<IService>, IService
{
public void Call()
{
}
}
... и заключены в этот класс со следующими общими ограничениями:
public class ServiceClientWrapper<TClient, TService>
where TClient : ClientBase<TService>, TService
where TService : class
{
public virtual TService CreateServiceClient()
{
return (TService)Activator.CreateInstance<TClient>();
}
}
Чтобы сделать его тестируемым, у меня есть фабрика упаковщиков, над которой я могу издеваться. Интерфейс фабрики обёрток выглядит так:
public interface IServiceClientWrapperFactory
{
ServiceClientWrapper<TClient, TService>
CreateServiceClientWrapper<TClient, TService>()
where TClient : ClientBase<TService>, TService
where TService : class;
}
Я проверяю эту настройку, используя этот код:
// A mock IService to return from my mock service wrapper:
var mockService = new Mock<IService>();
// A mock client wrapper to return from my mock wrapper factory:
var mockClientWrapper =
new Mock<ServiceClientWrapper<ServiceClient, IService>>();
mockClientWrapper
.Setup(mcw => mcw.CreateServiceClient())
.Returns(mockService.Object);
// A mock wrapper factory to inject into a client object:
var mockClientWrapperFactory = new Mock<IServiceClientWrapperFactory>();
mockClientWrapperFactory
.Setup(mcwf => mcwf.CreateServiceClientWrapper<ServiceClient, IService>())
.Returns(mockClientWrapper.Object);
// Get the mock client wrapper from the mock wrapper factory - boom!
mockClientWrapperFactory.Object
.CreateServiceClientWrapper<ServiceClient, IService>();
Ошибка:
GenericArguments [0], «TService», на
'ServiceClientWrapper`2 [TClient, TService]
нарушает ограничение типа
параметр 'TClient'.
Ограничения одинаковы, где бы я их ни указывал, он компилируется и работает просто отлично, ошибка не выдается, если я реализую IServiceClientWrapperFactory
и запускаю его без Moq ... какие-нибудь идеи?