如何测试没有返回值的函数?

O.O*_*O.O 6 c# unit-testing mstest .net-2.0

我有视觉工作室为我班上的每个成员创建一个测试.这是一个例子:

/// <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." );
}
Run Code Online (Sandbox Code Playgroud)

基于断言字符串,我想知道如何测试这个...任何想法?

Jus*_*ony 3

静态方法自然会使自己相当难以测试,因此我的建议是基于从静态方法重构代码。

我会将 Logger 转换为一个实例类,该实例类在构造函数中采用 IO 对象。这将允许您存根 IO 对象,并且您可以断言您的 IO 对象的Close方法已被调用。

仅当您想让代码 100% 可测试时才这样做。否则,我会同意莫的观点,如果它不可测试,那么就不要编写强制测试......那些往往非常脆弱。最后,您需要对代码保持务实态度。通常,记录器对于保持静态很有用,但是正如我已经提到的,这些往往非常难以测试......因此,请务实地对待您的工作,不要仅仅为了获得 100% 的代码覆盖率而编写测试。 .100%是有代价的...

更新

这就是为什么这不能真正从单元测试的教条观点进行测试。您不是在测试工作单元,而是在测试 LoggerLogger 的依赖项(在本例中为 IO 对象)。它还会使您的测试速度变慢,并且需要环境设置和状态(您必须首先打开一个实际文件才能关闭它,对吗?)。这些对于单元测试来说都是不好的,但是对于集成测试来说还可以......所以这也取决于您正在编写什么样的测试。