如果清理了非托管资源,则进行单元测试

时间:2012-02-11 09:46:57

标签: .net unit-testing tdd unmanagedresources

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

知道我怎么能这样做吗?

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

我还必须考虑"如果他们没有从Read()"超时,那么如果有一些非常棒的通用超级奇妙的方法来测试可能相关的流。

1 个答案:

答案 0 :(得分:0)

取决于资源是什么,但如果您正在将流保存到磁盘,并且您在不清理的情况下对fellover进行编码,则尝试删除该文件会导致出现问题。

然而,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);
}

尽可能多地指出未知数,如果你所选择的神明对你微笑,那么它们可能都是一种务实和实际的意义。