NUnit是否处置清除时实现IDisposable的对象?我意识到可以通过多种方法处理对象,但是例如,如果该方法在对象被处理之前失败了-NUnit会处理吗?(供参考,我使用的是v2.6 +)
我要问的特定原因是在创建实现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不会处置您的对象。NUnit 3.x将处置可IDisposposable的测试装置,仅此而已。
您声明似乎没有必要进行处置,因为NUnit可以为您做到这一点,但这是不正确的。在示例代码中,您看起来像在传递NUnit一个IDisposable对象,但实际上,您传递的是一个恰好包含IDisposable对象的委托/ lambda /代码块。
您会注意到的签名Assert.Throws
是;
public static TActual Throws<TActual>(TestDelegate code) where TActual : Exception
请注意,它需要一个TestDelegate
,而不是一个对象。TestDelegate
只是一个空的代表,
public delegate void TestDelegate();
您正在阅读代码,就好像传递了一样StreamReader
,但是实际上传递的是委托,或者换句话说,传递了NUnit调用的方法。NUnit不知道或不在乎您在该方法中所做的事情。像其他任何方法一样,由您决定要创建的对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句