繁体   English   中英

单元测试文件编写器功能

[英]unit testing a file writer function

我有一个函数,它将学生的详细信息作为输入,并将他们的报告卡写入xml文件。 当我试图在vs2008中创建单元测试时,我看到了一条消息 - “一个不返回值的方法无法验证”。 我的函数不返回它只写入文件并返回的值。

我该如何为这个函数编写测试?

[TestMethod()]
public void StoreInformationTest()
{
   StudentSettings target = new StudentSettings(); // TODO: Initialize to an appropriate   
   StudentSettings settings = null; // TODO: Initialize to an appropriate value
   target.StoreInformation(settings);
   Assert.Inconclusive("A method that does not return a value cannot be verified.");
}

提前致谢,

问候,约翰

首先,如果大叔叔Visual Studio告诉你无法测试你的方法,那就不一定是真的。

您应该将输出作为字符串返回到文件中,或者您的方法应该将TextWriter作为参数。 在前一种情况下,您可以使用模拟框架,如另一个答案中所述,为测试中的方法提供一个假的TextWriter对象。

通过良好的职责分离,可以轻松地将文件替换为内存流。 写入内存流而不是文件。 然后你可以测试它的内容。 但正如其他人所提到的,代码示例可能会揭示其他需求。

更新:
谢谢你的代码。 看起来你的StudentSettings课程做得很多。 将xml写入函数分离到自己的类中,从中提取接口,并将其作为构造函数参数注入到类中。 然后你可以在测试期间用你自己的模拟替换它。

您可以使用模拟框架来执行此操作。 一个很好的例子是Moq 简单地说,您可以创建假对象,并告诉他们表现得像另一个。 您还可以验证调用的频率和方法,调用方式以及调用方式。

编辑: 这里显示的快速入门指南有一些很好的例子,可能会让你直接。 在您的情况下,您可以创建包含写入文件的函数的类的moq。 使用验证功能,您可以检查/验证函数调用的频率以及它是否在没有任何异常的情况下运行。

代码生成器只是建议它不能根据其返回值(void)来验证您的测试,这非常有意义。 我认为其他人提到这更像是一个占位符。 在实际编写测试时,您需要确定您的通过标准是什么。 你可以这么简单;

Assert.IsTrue(File.Exists(filePath));

如果您关心的是文件存在,或者您可以深入了解它,请验证其内容等等。 这完全取决于你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM