TL;DR: 在 MVVM 客户端中实现 ViewModel 和 WCF 服务之间的依赖关系的良好且可测试的方法是什么?
请阅读问题的其余部分,以获取有关我在尝试执行此操作时遇到的问题的更多详细信息:
我正在开发一个连接到 wcf 服务的 silverlight 客户端,我想为客户端编写单元测试。因此,我正在寻找在我的 ViewModel 中使用 wcf 客户端并测试该交互的良好解决方案。到目前为止,我已经找到了两种解决方案:
解决方案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();
}
}
好的部分:每个请求都在不同的客户端上,因此将请求与答案匹配不会再有问题。
不好的部分:测试更难。我每次都必须为工厂和 wcf 客户端编写模拟。这不是我想做的事情,因为我已经有 200 次测试...... :(
所以我的问题是,你们是怎么做到的?您的 ViewModel 如何与 wcf 服务通信,在哪里注入依赖项,以及如何测试该交互?我觉得我错过了什么。。