don*_*ngg 4 .net c# unit-testing .net-4.0
这是一个我想编写单元测试的函数:
public object RequestAndSerializeJSON(string url, Type type) {
var request = (HttpWebRequest)WebRequest.Create(url);
request.Accept = "application/json";
var response = request.GetResponse();
using (var responseStream = response.GetResponseStream())
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(type);
return serializer.ReadObject(responseStream);
}
}
Run Code Online (Sandbox Code Playgroud)
我对测试这个的第一个想法是传递一个路径到一个文件,其中包含测试数据的url,但我不能这样做,因为我将它投射到一个HttpWebRequest并且它会抛出一个文件路径错误,因为它创建FileWebRequestfor文件路径.
有什么好办法呢?我正在使用Visual Studio测试工具进行测试.
你这里有问题.如您所见,您的代码执行两项操作.它获取请求然后创建一个对象.
如果你想对它进行单元测试,我建议拆分功能(这是一件好事,无论如何)
(经验法则:如果函数的名称很长,使用'和'字或描述多个东西,那么你应该重构它.我们想要小责任的小方法,所以我们可以替换它们或扩展它们或做与他们在未来更容易的事情).
就像是..
public WebRequest GetRequest(string url);
public object DeSerializeJSON(WebRequest request, Type type);
Run Code Online (Sandbox Code Playgroud)
可能有用.
现在,您可以在测试方法中注入模拟请求并相应地测试功能.