单元测试写入HttpWebRequest的请求流(Unit testing writing to HttpWebRequest's request stream)

编程入门 行业动态 更新时间:2024-10-18 06:12:56
单元测试写入HttpWebRequest的请求流(Unit testing writing to HttpWebRequest's request stream)

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

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)

更多推荐

本文发布于:2023-07-22 09:44:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1219092.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:单元测试   Unit   HttpWebRequest   testing   request

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!