有没有办法强制在单元测试期间创建的所有对象完成?我一直遇到的问题是,由于丢失GCHandle
实例而导致的任何泄漏似乎只有在进程本身(而不是AppDomain
!)终止时才最终确定,这是在程序集中的所有测试都已运行(并且可能“通过”)之后。
我在 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();
}
}
运行这将导致“通过”测试,但会通知后台线程有未处理的异常。在具有多个测试的装配中,这不太理想。