使用Web请求为函数编写单元测试

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测试工具进行测试.

mca*_*ral 8

你这里有问题.如您所见,您的代码执行两项操作.它获取请求然后创建一个对象.

如果你想对它进行单元测试,我建议拆分功能(这是一件好事,无论如何)

(经验法则:如果函数的名称很长,使用'和'字或描述多个东西,那么你应该重构它.我们想要小责任的小方法,所以我们可以替换它们或扩展它们或做与他们在未来更容易的事情).

就像是..

public WebRequest GetRequest(string url);
public object DeSerializeJSON(WebRequest request, Type type);
Run Code Online (Sandbox Code Playgroud)

可能有用.

现在,您可以在测试方法中注入模拟请求并相应地测试功能.