c# - 对 REST 客户端进行单元测试

标签 c# unit-testing rest mocking

我对单元测试相当陌生,但我正在尝试将它纳入我编写的任何新代码(包括错误修复)的开发过程中。

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

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

的方法

我想要单元测试的东西...

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

我该怎么做才能测试该服务是否仍能正常运行。 I.E 人还有名字吗?我可以对此进行单元测试还是更多的是集成测试?

最佳答案

我假设您的代码现在直接使用 HttpWebRequestHttpWebResponse。如果是这种情况,请将所有出现的 HttpWebRequest 替换为 IRequest 并将 HttpWebResponse 替换为 IResponse。定义这两个接口(interface)并暴露你需要的属性和方法,像这样:

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

public interface IResponse
{
    Stream GetStream();
}

那么就是将这些接口(interface)实现两次;一次用于实际应用程序(使用 HttpWebRequestHttpWebResponse 来执行 HTTP 操作)一次用于测试(不使用 HTTP,而是可能写入控制台,一个日志或类似的东西)。

然后,在实例化你的客户端时,注入(inject)你想要的IRequest的实现即可:

var realClient = new Client(new MyHttpRequest());
var testClient = new Client(new MyTestRequest());

关于c# - 对 REST 客户端进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7363021/

相关文章:

java - Spring/Hibernate/TestNG - 手动 session 和事务设置

unit-testing - 参数化 jUnit 测试,无需更改运行程序

json - 使用 JSON Body on Rule 调用 REST API Business Central 时解码输入时出错

java - 在 android 应用程序中使用为 angular js 编写的 rest api

c# - 当测试并行运行时,FakeItEasy 有时无法创建假货

c# - PowerCollections 中 GetValueElseAdd 的 BCL 等价物是什么

C# 驱动程序处理 GUID

c# - 在 C# 中无失真地裁剪和打印图像文档

c# - 找不到与具有绑定(bind) WebHttpBinding 的终结点的方案 https 匹配的基址。注册的基址方案是 [http]

C# : How to get number of days from an object of DateTime