【发布时间】:2014-02-13 23:56:32
【问题描述】:
我目前正在用 C# 为 ResellerClub 的 REST/HTTP API 编写一个 API 包装器,它以各种 JSON 对象的形式提供响应。通过使用 HttpClient 类在 API 端点上执行 HTTP POST/GET 来执行调用。 JSON.Net 用于解析响应。
如何对 API 的 API 包装器功能进行单元测试,因为大多数调用都需要一定级别的预期状态才能成功。例如,我无法在尚未注册的域上测试 CNAME 记录的创建。
我知道测试不应该依赖于它们自己没有安排的状态,而且我还被告知测试不应该真正处理任何类型的持久性机制,例如数据库。那么,对于上面的 CNAME 记录示例,作为测试的“安排”阶段的一部分,我应该注册一个测试域,断言它有效,然后执行实际的 CNAME 功能?
或者,我是否应该想出一些方法来模拟从 Reseller Club API 返回的 JSON 响应?
编辑:我的 API 类示例 (ResellerClubApi.cs)
private async Task<string> DownloadString(string uri)
{
// HttpClient object downloads the JSON response string asynchronously
}
DownloadString() 方法被我的功能用作从第三方服务获取响应的通用方法。
public async Task<List<string>> SuggestNames(string domainName)
{
// Calls DownloadString() with the correct URI, uses Newtonsoft.JSON to parse
// string representation of JSON into object
}
上面的SuggestNames()等方法从更高的服务层这样调用
public void someServiceLayerMethod()
{
var rcApi = new ResellerClubApi();
var x = rcApi.SuggestNames("something");
// ...
}
如您所见,当我的 ResellerClubApi 类在通过 HTTP 执行操作之前是我自己的代码的最低可能层时,我对如何模拟来自 HttpClient 之类的 JSON 响应有点困惑。
我也不知道如何开始使用 IoC 来处理 HttpClient 依赖...
谢谢
【问题讨论】:
-
你有一些示例代码来看看你的类是如何制作的吗?你使用依赖注入/控制反转吗?
-
@Tseng 我添加了一些代码示例,希望对您有所帮助。
标签: c# unit-testing testing dependency-injection dotnet-httpclient