单元测试写入HttpWebRequest请求流

时间:2012-04-25 20:11:30

标签: .net unit-testing httpwebrequest

我回来在我们的应用程序中填写了一些单元测试,并且遇到了以下方法。

public virtual void WriteBodyToRequestStream(HttpWebRequest webRequest, byte[] redirectBodyBuffer) {
    var requestStream = webRequest.GetRequestStream();
    requestStream.Write(redirectBodyBuffer, 0, redirectBodyBuffer.Length);
    requestStream.Close();
}

我正在尝试编写一个在流中插入一些文本的简单测试。我遇到的问题是如何在将文本写入流后验证文本。这是我到目前为止所拥有的。

[Test, Ignore("not working yet")]
public void Should_write_to_request_stream()
{
    var request = WebRequest.Create("http://localhost/") as HttpWebRequest;
    request.Method = "POST";
    var encoding = new System.Text.UTF8Encoding();
    var bytes = encoding.GetBytes("testing");
    _helper.WriteBodyToRequestStream(request, bytes);

    var stream = request.GetRequestStream() as MemoryStream;
    var result = System.Text.Encoding.UTF8.GetString(stream.ToArray());

    Assert.AreEqual("testing", result);
}

当我运行此测试时,stream var为空。

1 个答案:

答案 0 :(得分:2)

您真的需要将HttpWebRequest传递给WriteBodyToRequestStream方法吗?你真的不关心你感兴趣的HttpWebRequest更多的流:

public virtual void WriteBodyToRequestStream(Stream requestStream , byte[] redirectBodyBuffer) {
//var requestStream = webRequest.GetRequestStream(); remove this line.
requestStream.Write(redirectBodyBuffer, 0, redirectBodyBuffer.Length);
requestStream.Close();
}

这使您的方法易于测试(无论是单元测试还是集成测试,我都会留下讨论; P)