我正在使用TDD并为使用非托管资源的System.IO.Stream对象创建单元测试。我的项目包含许多这样的流,我想测试这些实现是否在处置时实际清理了非托管资源。
知道我怎么能这样做吗?
今天早上我可能有点累了,但我能想到的就是创建和处理1k个实例并查看内存消耗。
我还必须考虑"如果他们没有从Read()"超时,那么如果有一些非常棒的通用超级奇妙的方法来测试可能相关的流。
答案 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);
}
尽可能多地指出未知数,如果你所选择的神明对你微笑,那么它们可能都是一种务实和实际的意义。