.net 检测单元测试中的finalize异常

.net 检测单元测试中的finalize异常,.net,testing,memory-leaks,finalize,.net,Testing,Memory Leaks,Finalize,是否有办法强制在单元测试期间创建的所有对象最终确定?我一直遇到的问题是,由于丢失GCHandle实例而导致的任何泄漏似乎只有在进程本身(而不是AppDomain!)终止时才会结束,这是在程序集中的所有测试都已运行(并且可能“通过”)之后 我尽了最大的努力,但还不够: 运行此操作将导致“通过”测试,但会通知后台线程有未处理的异常。在具有多个测试的程序集中,这并不理想。在我看来,您实际上想要测试Dispose方法。如果是这样,为什么不直接调用Dipose方法呢 GC将在调用它的线程上运行。因此,另一

是否有办法强制在单元测试期间创建的所有对象最终确定?我一直遇到的问题是,由于丢失
GCHandle
实例而导致的任何泄漏似乎只有在进程本身(而不是
AppDomain
!)终止时才会结束,这是在程序集中的所有测试都已运行(并且可能“通过”)之后

我尽了最大的努力,但还不够:


运行此操作将导致“通过”测试,但会通知后台线程有未处理的异常。在具有多个测试的程序集中,这并不理想。

在我看来,您实际上想要测试Dispose方法。如果是这样,为什么不直接调用Dipose方法呢

GC将在调用它的线程上运行。因此,另一种选择是在测试中调用GC.Collection方法


编辑:您是否尝试调用单元测试?我从来都不需要做您正试图做的事情,但据我所知,garabage收集器应该在您的单元测试线程中运行,从而允许您的单元测试捕获任何异常。

在我看来,您实际上想要测试Dispose方法。如果是这样,为什么不直接调用Dipose方法呢

GC将在调用它的线程上运行。因此,另一种选择是在测试中调用GC.Collection方法


编辑:您是否尝试调用单元测试?我从来都不需要精确地执行您试图执行的操作,但据我所知,garabage收集器应该在您的单元测试线程中运行,从而允许您的单元测试捕获任何异常。

需要终结器的情况非常少。确实需要吗?它是一个加载本机类的C++/CLI类。finalizer是这样的,C++/CLI类可以删除它。很少需要finalizer。确实需要吗?它是一个加载本机类的C++/CLI类。最终定稿器是这样的,C++/CLI类可以删除它。我想测试在给定测试运行期间创建的任何对象中的最终确定者是否没有问题。在比我上面的小示例更复杂的情况下,是否可以确保在函数中创建的对象在最终确定时不会崩溃?不完全是这样。我想测试在给定测试运行期间创建的任何对象中的最终确定者是否没有问题。在比我上面的小示例更复杂的情况下,是否可以确保在函数期间创建的对象在最终确定时不会崩溃?
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();
    }
}