简单REST客户端的单元测试
假设我有一个简单的方法,可以从REST服务获取一些数据。方法如下所示:简单REST客户端的单元测试,rest,unit-testing,webclient,Rest,Unit Testing,Webclient,假设我有一个简单的方法,可以从REST服务获取一些数据。方法如下所示: public string GetDataFromRest(string uri) { string result = String.Empty; using(WebClient web = new WebClient()) { result = web.DownloadString(uri); } return result; } 所以,现在我想为这个方法创建单元测试。我不想使用外部REST服务,但我希望
public string GetDataFromRest(string uri) {
string result = String.Empty;
using(WebClient web = new WebClient()) {
result = web.DownloadString(uri);
}
return result;
}
所以,现在我想为这个方法创建单元测试。我不想使用外部REST服务,但我希望从任何URI获得虚假响应,而不需要真正连接到服务。类似于单元测试->中每次执行GetDataFromRest(uri)都会返回一些XML。随着详细介绍,部分问题是您依赖于WebClient
类
WebClient
的示例包装器如下所示:
public interface IWebClient
{
string DownloadString(string address);
}
public class WebClientWrapper : IWebClient
{
public string DownloadString(string address)
{
using(WebClient web = new WebClient()) {
return result = web.DownloadString(uri);
}
}
}
public class MyClass
{
private readonly IWebClient _webClient;
public MyClass(IWebClient webClient)
{
_webClient = webClient;
}
public string GetDataFromRest(string uri)
{
return _webClient.DownloadString(uri);
}
}
当然,走这条路意味着
webclientrapper
可以使用“不太真实”的URI或您专门控制的内容进行单元测试。我只实现了WebClient
的一个方法,但是这从一个真实的URI中具体化了GetDataFromRest
中的依赖关系,因为您现在可以模拟返回数据。这也有助于您完成任何需要WebClient
的工作,您现在可以使用包装器类,轻松模拟返回的数据,因为您现在正在对接口而不是具体化进行编程。非常感谢!在我的代码中,其他帖子、PUT等会有很多更改,但会像一个符咒一样工作:)。