TL; Что такое хороший и проверяемый способ реализации зависимости между ViewModels и WCF-сервисами в клиенте MVVM?Как вы введете зависимости клиента wcf в ViewModel и сохраните его для проверки?
Пожалуйста, прочитайте остальную часть вопроса для более подробной информации о проблемах, я столкнулся при попытке сделать это:
Я работаю на SilverLight клиента, который подключается к службе WCF, и я хочу написать единичные тесты для клиента. Итак, я ищу хорошее решение для использования клиентов wcf в моих моделях ViewModels и тестирования этого взаимодействия. Я не нашел два решения до сих пор:
Решение 1: Это на самом деле, как я не реализовали до сих пор:
public class ViewModelExample
{
public ViewModelExample(IServiceClient client)
{
client.DoWorkCompleted += ..
client.DoWorkAsync();
}
}
//This is how the interface looks like
public interface IServiceClient
{
event EventHandler<AsyncCompletedEventArgs> DoWorkCompleted;
void DoWorkAsync();
}
//I was able to put the interface on the generated clients because they are partial classes, like this:
public partial class GeneratedServiceClient : IServiceClient
{
}
Хорошая часть: относительно легко издеваться
Плохая часть: мой клиент службы работает до тех пор, пока мой ViewModel, и когда у меня есть параллельные запросы, я не знаю, какой ответ принадлежит какому запросу.
Решение 2: Вдохновленный этим ответом WCF Service Client Lifetime.
public class ViewModelExample
{
public ViewModelExample(IServiceFactory factory)
{
var client = factory.CreateClient();
client.DoWorkCompleted += ...
client.DoWorkAsync();
}
}
хорошая часть: каждый запрос не находится на другом клиенте, так что никаких больше проблем с соответствием запросов с ответами.
Плохая часть: сложнее проверить. Мне приходилось каждый раз писать mocks как для фабрики, так и для wcf-клиента. Это не то, что я хотел бы сделать, так как я alreay есть 200 тестов ... :(
Так что мой вопрос, как вы, ребята, это сделать? Как ваше ViewModels поговорить с ФОС услуг, где вы впрыскивать зависимость, и как вы проверяете, что взаимодействие? Я чувствую, что я что-то не хватает ..
круто, мне это нравится, у меня нет другой фабрики, чтобы насмехаться. – stralsi