c# - 如何测试一个没有返回值的函数?

标签 c# unit-testing .net-2.0 mstest

我让 visual studio 为我类的每个成员创建了一个测试。这是一个示例:

/// <summary>
///A test for CloseCurrentTextLogFile
///</summary>
[TestMethod()]
public void CloseCurrentTextLogFileTest()
{
  Logger.CloseCurrentTextLogFile();
  Assert.Inconclusive( "A method that does not return a value cannot be verified." );
}

基于断言字符串,我想知道如何测试它...有什么想法吗?

最佳答案

静态方法自然会使它们自身相当难以测试,因此我的建议是基于重构您的代码以远离静态方法。

我会把 Logger 变成一个实例类,在构造函数中接受一个 IO 对象。这将允许您 stub IO 对象,并且您可以断言您的 IO 对象的 Close 方法已被调用。

这仅适用于您想让代码 100% 可测试的情况。否则,我会同意 Mo,如果它不可测试,那么就不要编写强制测试……那些往往非常脆弱。最后,您需要务实地对待您的代码。通常记录器对于保持静态很有用,但是正如我已经提到的,这些记录器往往是非常不可测试的……所以对您的工作要务实,不要仅仅为了获得 100% 的代码覆盖率而编写测试。 .100% 会付出代价...

更新

这就是为什么从单元测试的教条 POV 来看这不是真正可测试的。您不是在测试工作单元,而是在测试 Logger AND Logger 的依赖项(在本例中为 IO 对象)。它还会使您的测试变慢并且需要环境设置和状态(您必须首先打开一个实际文件才能关闭它,对吗?)。这些都对单元测试不利,但对集成测试没问题……所以这也取决于您编写的测试类型。

关于c# - 如何测试一个没有返回值的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11366420/

相关文章:

c# - 在字符串中找到特定的单词并打印剩余的行

c++ - Boost 单元测试因 sigabrt 而失败

.net - 单元测试可查询

c# - VS localtestrun.testrunco​​nfig 中缺少代码覆盖选项卡?

.net - 这是什么控制?带下拉菜单的("Open"按钮)

c# - 不使用 XmlDocument.Loadxml() 函数将 XML 反序列化为 JSON

c# - Process.Start in C# 系统找不到指定的文件错误

C# 字符串格式标志或修饰符到小写参数

c# - 用数字命名的 child 不好吗?

c# - 是否可以在空数据网格中显示消息