Каков наилучший способ создания модульных тестов для проверки параметров, которые я отправляю в службу WCF?
У меня есть проект, в котором у меня есть класс репозитория, который говорит с моей службой WCF. Это выглядит примерно так:
public class MyRepository : IMyRepository
{
public Customer GetCustomer(int customerId)
{
var client = new MyWCFServiceClient();
MyWCFServiceCustomer customerWCF = client.GetCustomer(customerId);
Customer customer = ConvertCustomer(customerWCF);
return customer;
}
//Convert a customer object recieved from the WCF service to a customer of
//the type used in this project.
private Customer ConvertCustomer(MyWCFServiceCustomer customerWCF)
{
Customer customer = new Customer();
customer.Id = customerWCF.Id;
customer.Name = customerWCF.Name;
return customer;
}
}
(Это явно упрощено)
Теперь я хотел бы написать модульные тесты, чтобы проверить правильность параметров, которые я отправляю в сервис из репозитория. В приведенном выше примере это было бы бессмысленно, поскольку я отправляю customerId только в том виде, в котором он был передан, но в моем реальном коде больше параметров и немного логики в классе репозитория.
Проблема в том, что сгенерированный класс клиента службы (MyWCFServiceClient) не имеет интерфейса, и поэтому я не могу его смоделировать в своих тестах (или я ошибаюсь?).
Редактировать: я был неправ по этому поводу. Есть интерфейс! Смотрите мой ответ ниже.
Одним из решений было бы иметь класс, который оборачивает клиент службы и который только повторно отправляет параметры и возвращает результат:
public class ClientProxy : IClientProxy
{
public MyWCFServiceCustomer GetCustomer(int customerId)
{
var client = new MyWCFServiceClient();
return client.GetCustomer(customerId);
}
}
public interface IClientProxy
{
MyWCFServiceCustomer GetCustomer(int customerId);
}
Таким образом, я мог бы дать этому классу интерфейс и таким образом высмеивать его. Но кажется утомительным писать этот прокси-класс и обновлять его, поэтому я надеялся, что у вас есть лучшее решение! :)