我回来在我们的应用程序中填写了一些单元测试,并且遇到了以下方法。
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为空。
答案 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)