簡體   English   中英

使用Moq模擬HttpWebResponse中的響應流

[英]Mocking the response stream in HttpWebResponse using Moq

我正在使用Moq來模擬HttpWebResponse進行單元測試。 我創建了一個模擬類,該類繼承自我要測試的類,並且覆蓋了返回HttpWebResponse的方法。 我想將JSON字符串寫到單元測試的響應流中,但是在嘗試讀取“不可讀的流”流時出現ArgumentException。

這是我所擁有的:

public class ParentClass
{
    private string ProcessResponse(HttpWebResponse response)
    {
        string json = String.Empty;
        using (var streamReader = new StreamReader(response.GetResponseStream())) //exception here
        {
            json = streamReader.ReadToEnd();
        }
        return json;
    }

    //other stuff
}

public class MockClass : ParentClass
{
    public Stream responseStream = new MemoryStream();

    public void WriteJson(string json)
    {
        using(var writer = new StreamWriter(responseStream))
        {
            writer.Write(json);
        }
    }

    protected override HttpWebResponse GetResponse(HttpWebRequest request)
    {
        var response = new Mock<HttpWebResponse>();
        response.Setup(r => r.GetResponseStream()).Returns(responseStream);
        return response.Object;
    }
}

問題似乎出在using語句上。 這是我所做的更改:

public void WriteJson(string json)
{
    var jsonBytes = Encoding.UTF8.GetBytes(json);
    responseStream.Write(jsonBytes, 0, jsonBytes.Length);
    responseStream.Seek(0, SeekOrigin.Begin);
}

使用StreamWriter的重載使基礎流保持打開狀態是更安全的:

public StreamWriter(Stream stream, Encoding encoding, int bufferSize, bool leaveOpen)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM