NUnit是否处理在清理时实现IDisposable的对象?我意识到我可以通过各种方式获取方法中处理的对象,但是,例如,如果方法在处理对象之前失败 - NUnit会照顾它吗? (作为参考,我在v2.6 +)NUnit是否处理实现IDisposable的对象?
我问的具体原因是一个实现IDisposable的对象创建的情况下,但我断言创建时引发异常。如果测试失败 - 并且创建了对象,我不想遇到内存泄漏问题。
例子:
//Will the StreamReader instance here be disposed
//Of if the assertion fails, and the instance is created?
Assert.Throws<Exception>(() => new StreamReader(filename));
我知道这将工作:
Assert.Throws<Exception>(() =>
{
using (StreamReader sr = new StreamReader(filename)) { }
}
,但它只是似乎是不必要的代码,如果NUnit的将采取处置时必要的照顾。
我看不到一种方式,NUnit会可靠地知道没有其他引用IDisposable,以便它可以安全地处置它。我不想碰到assert错误地处理引用对象的情况。测试应该不是非常复杂,只需制作一个虚拟的一次性对象,在dispose中设置一个断点并检查堆栈跟踪的位置。 –
@JoachimIsaksson 我想知道NUnit是否可以在每个测试用例的末尾处理所有对象,因为测试_不应该依赖于对方,并且在测试用例中创建的任何东西理论上可以尽快处理测试完成。 我很满意与标准的IDisposable做法保持一致,但我想知道是否有人对此有明确的答案。 – user2338408
我同意@Joachim。只需补充一点,添加一个'[TearDown]'来处理一个对象可能是要走的路,而不是你的问题中的'Assert.Throws(using ...)'。 – Chris