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。