1

我正在尝试找到一种方法来为“CheckSomething”方法编写单元测试,但是我很难弄清楚如何处理我在该方法中实例化的 RestClient 对象。

我应该抽象出RestClient,并将接口依赖项放在类级别并从构造函数内部注入吗?如果我选择这条路线,这是否意味着我必须接口所有依赖项??

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 字段,你可以使用方法注入,并在 CheckSomething 方法中添加一个 RestClient 参数。然后,您可以模拟 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 回答