有没有办法强制在单元测试期间创建的所有对象完成?我一直遇到的问题是,当进程本身(而不是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();
}
}
运行此命令将导致“已通过”测试,但会通知后台线程有未处理的异常。在具有多个测试的装配中,这不太理想。
答案 0 :(得分:0)
在我看来,你真的想测试Dispose方法。如果是这种情况,为什么不直接调用Dipose方法?
GC将在调用它的线程上运行。因此,另一种方法是在测试中调用GC.Collection方法。
编辑:您是否尝试过在单元测试中调用GC.Collect?我从来不需要完全按照你要做的去做,但据我所知,garabage收集器应该在你的单元测试的线程中运行,从而允许你的单元测试捕获任何异常。