1

「CheckSomething」メソッドの単体テストを作成する方法を見つけようとしていますが、メソッドでインスタンス化している RestClient オブジェクトをどうするかを理解するのに非常に苦労しています。

RestClient を抽象化し、Interface の依存関係をクラス レベルに置き、コンストラクター内から注入する必要がありますか?? このルートを使用する場合、すべての依存関係をインターフェイスアウトする必要があるということですか??

public class SomeRepository : IXRepository
{
    public SomeRepository()
    {
    }

    public bool CheckSomething()
    {
        var client = new RestClient("someurl");

        var request = new RestRequest("resourceX/{name}", Method.GET);
        request.AddUrlSegment("name", "ABC");
        var response = client.Execute(request);

        if (response.StatusCode == HttpStatusCode.NotFound) return false;
        if (response.StatusCode == HttpStatusCode.OK) return true;

        throw new Exception("Something is messed up");
    }
}
4

1 に答える 1

2

SomeRepository にクラス レベルの RestClient フィールドが必要ない場合は、メソッド インジェクションを使用して、RestClient パラメーターを CheckSomething メソッドに追加できます。その後、単体テスト用に RestClient をモックできます。

public bool CheckSomething(RestClient restClient)
{
    var request = new RestRequest("resourceX/{name}", Method.GET);
    request.AddUrlSegment("name", "ABC");
    var response = client.Execute(request);

    if (response.StatusCode == HttpStatusCode.NotFound) return false;
    if (response.StatusCode == HttpStatusCode.OK) return true;

    throw new Exception("Something is messed up");
}

それが私のコードである場合、次のことをテストしたいと思います。

  1. RestClient.Execute メソッドに渡された RestRequest が適切に設定されているか。
  2. メソッドは response.StatusCode に基づいて true または false を返しますか?
  3. 他のステータス コードによって例外がスローされますか。

テストする必要があるのはそれだけであれば、モックする必要があるのは RestClient だけです。つまり、メソッド インジェクション、コンストラクター、またはプロパティ インジェクションを簡単に使用できます。

于 2012-09-14T19:52:21.687 に答える