我正在我们的应用程序中重新填写一些单元测试,并且遇到了以下方法。
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为null。
I'm back filling some unit tests in our app at work, and came across the following method.
public virtual void WriteBodyToRequestStream(HttpWebRequest webRequest, byte[] redirectBodyBuffer) { var requestStream = webRequest.GetRequestStream(); requestStream.Write(redirectBodyBuffer, 0, redirectBodyBuffer.Length); requestStream.Close(); }I'm trying to write a simple test that inserts some text in the stream. The problem I'm having is figuring out how to verify the text after it's written into the stream. Here's what I have so far.
[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); }When I run this test, the stream var is null.
最满意答案
你真的需要将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)
do you really need to pass HttpWebRequest to your WriteBodyToRequestStream method? You really don't care about the HttpWebRequest its more the stream you are interested in:
public virtual void WriteBodyToRequestStream(Stream requestStream , byte[] redirectBodyBuffer) { //var requestStream = webRequest.GetRequestStream(); remove this line. requestStream.Write(redirectBodyBuffer, 0, redirectBodyBuffer.Length); requestStream.Close(); }This makes your method easily testable (whether its a unit test or integration test I will leave up for discussion ;P)
更多推荐
发布评论