1

我正在使用 TDD 并为使用非托管资源的 System.IO.Stream 对象创建单元测试。我的项目由许多这样的流组成,我想测试实现是否在处理它们时真正清理了它们的非托管资源。

知道我该怎么做吗?

今天早上我可能有点累,但我能想到的只是创建和处理 1k 个实例并查看内存消耗。

我还必须考虑“如果他们没有从 Read() 超时怎么办”,所以如果有一些很棒的通用超级神奇的测试流的方法可能是相关的。

4

1 回答 1

0

取决于资源是什么,但如果您将流保存到磁盘,并且您在没有清理的情况下进行代码故障转移,则尝试删除文件会导致问题。

然而,TTD 方法会导致异常,您的代码应该处理并抛出异常(首选但并非总是如此)。然后进行测试,将其作为预期异常选择,然后检查资源以查看它们是否已正确整理。这当然是对已知情况的测试,不管有什么困难。

我们也使用了很多流,但基本上我们遵循 FxCop 和最佳实践,编写了一些实用程序和帮助类。之后,它虔诚地使用或实现 IDisposable。

我要彻底推荐的另一件事是使用 FileStream 的“完整”版本来读写磁盘。

你看不到类似的东西

XmlDocument doc = new XmlDocument()
doc.Load("myxml.xml");

相反,我们这样做

XmlDocument doc = new XmlDocument()
using(FileStream fs = new FileStream("myxml.xml",FileMode.Open, FileAccess.Read))
{
  doc.load(fs);
}

尽可能多地确定未知数,如果你选择的神对你微笑,它可能都是务实和实用的。

于 2012-02-11T10:34:04.637 回答