TL; DR: MVVMクライアントでViewModelsとWCFサービス間の依存関係を実装するための優れたテスト可能な方法は何ですか?
これを実行しようとしたときに発生した問題の詳細については、残りの質問をお読みください。
wcfサービスに接続するSilverlightクライアントに取り組んでおり、クライアントの単体テストを作成したいと考えています。そのため、ViewModelsでwcfクライアントを使用し、その相互作用をテストするための優れたソリューションを探しています。私はこれまでに2つの解決策を見つけました:
解決策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サービスクライアントの存続期間。
public class ViewModelExample
{
public ViewModelExample(IServiceFactory factory)
{
var client = factory.CreateClient();
client.DoWorkCompleted += ...
client.DoWorkAsync();
}
}
良い部分:各リクエストは異なるクライアント上にあるため、リクエストと回答を一致させることに問題はありません。
悪い部分:テストするのはもっと難しいです。毎回、ファクトリとwcfクライアントの両方のモックを作成する必要があります。私はすでに200のテストを持っているので、これは私がやりたいことではありません... :(
だから私の質問は、どうやってやるの?ViewModelsはwcfサービスとどのように通信し、依存関係をどこに挿入し、その相互作用をどのようにテストしますか?何かが足りないと感じます。