是否有强制在单元测试期间创建的所有对象最终确定的方法?我一直遇到的问题是,当进程本身(而不是AppDomain
!)终止时,由于丢失GCHandle
实例而导致的任何泄漏似乎都已最终确定,这是在程序集中的所有测试都已运行(并且可能“通过”)之后, 。在单元测试中检测完成异常
我最好的,但还不够,尝试在C#:
class Foo : IDisposable
{
~Foo() { Dispose(); }
public void Dispose() { throw new Exception(); }
}
[TestClass]
public class Finalise
{
void bar()
{
GCHandle.Alloc(new Foo()); // leak
}
[TestMethod]
public void DetectFinalizeException()
{
bar();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
运行,这将导致一个“合格”的测试,但有一个通知后台线程有未处理的异常。在具有多个测试的装配中,这并不理想。
需要一个终结器是非常罕见的。你确定你需要吗? – jason
这是一个加载本地类的C++/CLI类。终结者是这样的,C++/CLI类可以删除它。 – Ayjay