单元测试REST客户端

BZi*_*ink 11 c# rest unit-testing mocking

我对单元测试相当新,但我正在尝试将其合并到我编写的任何新代码(包括错误修复)的开发过程中.

我正在使用REST客户端与Highrise(37Signals)进行通信.如何在不依赖外部依赖的情况下对此进行单元测试?(REST服务).

例如,我将有一个名为的方法 GetPeople()

我想要进行单元测试的事情......

  1. 该方法返回帐户中正确的人数.
  2. 如果帐户中没有人,则该方法返回null
  3. 如果该方法无法连接到该服务,则会抛出异常.

我该怎么做才能测试该服务的功能是否相同.IE用户还有名字吗?我可以对此进行单元测试,还是更多的集成测试?

Asb*_*erg 4

我假设您的代码现在直接使用HttpWebRequestand 。HttpWebResponse如果是这种情况,请将所有出现的withHttpWebRequestIRequest替换为。定义这两个接口并公开您需要的属性和方法,如下所示:HttpWebResponseIResponse

public interface IRequest
{
    IResponse GetResponse(string url);
    IResponse GetResponse(string url, object data);
}

public interface IResponse
{
    Stream GetStream();
}
Run Code Online (Sandbox Code Playgroud)

那么只要实现这些接口两次就可以了;一次用于实际应用程序(使用HttpWebRequestHttpWebResponse执行 HTTP 内容),一次用于测试(不使用 HTTP,但可能写入控制台、日志或类似内容)。

然后,在实例化您的客户端时,只需注入IRequest您想要的实现:

var realClient = new Client(new MyHttpRequest());
var testClient = new Client(new MyTestRequest());
Run Code Online (Sandbox Code Playgroud)