使用StreamWriter作为参数之一测试void方法

时间:2015-10-20 16:13:59

标签: c# .net unit-testing nunit automated-tests

我目前有这样的方法

public void BusinessMethod(object value, StreamWriter sw)
{
    //Calls a private method that converts the data in `value` to a custom formatted string variable `str`
    string str = myPrivateMethod(value);

    //write the string to stream
    sw.Write(str);
}

我正在尝试使用提到的here方法来测试此方法,并且做了完全相同的事情。但是,我的result字符串以空字符串形式返回。我无法更改方法签名。如何测试这样的方法?我正在使用Nunit进行测试。

这是我的测试方法

    [Test]
    public void My_Test()
    {
        MyPoco dto = new MyPoco ();
        //set up the dto properties here

        using (var stream = new MemoryStream())
        using (var writer = new StreamWriter(stream))
        {
            sut.BusinessMethod(dto, writer);

            string result = Encoding.UTF8.GetString(stream.ToArray());
        }
    }

1 个答案:

答案 0 :(得分:3)

您需要Close / Flush / Dispose编写器,因此它实际上会将更改提交到流:

using (var stream = new MemoryStream())
{
    using (var writer = new StreamWriter(stream))
    {
        sut.BusinessMethod(dto, writer);
    }
    // moved outside of inner using to ensure writer stored content to stream
    string result = Encoding.UTF8.GetString(stream.ToArray());
}