Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试以StreamWriter作为参数之一的void方法_C#_.net_Unit Testing_Nunit_Automated Tests - Fatal编程技术网

C# 单元测试以StreamWriter作为参数之一的void方法

C# 单元测试以StreamWriter作为参数之一的void方法,c#,.net,unit-testing,nunit,automated-tests,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 str

我现在有一个这样的方法

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);
}
我正在尝试使用上面提到的方法来测试这个方法,并且做了完全相同的事情。但是,我的
结果
字符串返回为空字符串。我无法更改方法签名。如何测试这样的方法?我正在使用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());
        }
    }

您需要
关闭
/
刷新
/
处置
写入程序,以便它实际将更改提交到流:

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());
}

您试图验证的确切行为是什么?我试图验证发送到
BusinessMethod
的dto是否写入流。这就是
BusinessMethod
所负责的全部内容。由于您的测试没有断言,因此它实际上并不测试任何内容。你能提供一个包含所有相关代码的最小复制案例吗?你还提到
actual
为空,但我看不到和actual。你是说
结果
?此外,您还需要类似Assert.AreEqual(“预期结果”,Result)的内容;在从流中读取数据之前,请尝试刷新streamwriter。