Web サービスをセットアップするときに、リポジトリクラスを使用してデータをフェッチし、クライアントに送り返すことができます。サービスによって実行されるロジックを単体テストする必要がある場合は、データベースへの呼び出しを回避するために、いくつかのハードコードされたデータ オブジェクトを返す偽のリポジトリへの参照を挿入することができます。
ただし、クライアント側では、サービス プロキシ経由でこの Web サービスを呼び出す MVC ベースの Web アプリケーションがあるとします。 MVC アプリのロジックを単体テストし、サービスが返すものを表すデータをフィードしたい場合、プロキシ参照を偽造するにはどうすればよいですか? 私の考えは次のとおりですが、これについて 100% の自信があるわけではなく、より簡単な解決策を見逃しているのではないかと思います。
プロキシ インターフェイスをセットアップし (IProxy と呼びましょう)、その 2 つの具体的な実装 (たとえば、ProxyとFakeProxy ) をセットアップし、実行中の状況に適したものを挿入します (ユニット テストを実行する場合は FakeProxy を、実行する場合は Proxy を使用します)。実際の本番アプリケーション)。実際のサービス呼び出しを行わずに単体テスト用のサンプル データを生成するには、偽のプロキシに偽のリポジトリ (上記のサーバー シナリオで使用されているものと同じもの) を実装する必要がありますか? クライアント側コードのテストを支援するために偽のプロキシ クラスを設定する最善の方法がわかりません。
アップデート:
これまでに投稿された回答には同意しますが、すでにその点を考慮しているので、なぜこれを求めているのかを示すサンプル C# コードを提供させてください。プロキシの設計から偽のリポジトリを除外した場合、私の偽のプロキシは次の非常に単純で不自然な例のようになります。
public class FakeCustomerProxy : ICustomerProxy
{
private List<Customer> Customers;
public FakeProxy()
{
Customers = new List<Customer>();
Customers.Add(new Customer { Id = 1, Name = "Smith, John" });
Customers.Add(new Customer { Id = 2, Name = "Johnson, Al" });
Customers.Add(new Customer { Id = 3, Name = "Thomas, William" });
}
public Customer GetById(int customerId)
{
return Customers.Where(c => c.Id == customerId).FirstOrDefault();
}
}
GetById ()メソッドは、必要な顧客情報を取得するために Web サービスを呼び出すのではなく、このクラスに埋め込まれたハードコーディングされた顧客リストから単にそれを返します。これは、私が偽のリポジトリ用に設定したものと実際に似ているため (サービス ロジックのテストを支援するために、非常によく似たコードをサーバー側に設定している場合もあります)、これらのハードコーディングされた顧客を配置することを検討する必要があるかどうかに興味がありました。複数の場所で使用される専用の偽のリポジトリ クラスへの参照。 この偽のプロキシの設計を完全に間違って考えているのでしょうか?