gpt4 book ai didi

.net - 在单元测试中检测终结异常

转载 作者:行者123 更新时间:2023-11-28 20:16:06 25 4
gpt4 key购买 nike

有没有办法强制完成单元测试期间创建的所有对象?我一直遇到的问题是,由于丢失 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();
}
}

运行这将导致“通过”测试,但会通知后台线程有未处理的异常。在具有多个测试的装配体中,这不太理想。

最佳答案

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

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

编辑:你试过调用GC.Collect吗?在你的单元测试中?我从来不需要做你想做的事情,但据我了解,垃圾收集器应该在你的单元测试线程中运行,从而允许你的单元测试捕获任何异常。

关于.net - 在单元测试中检测终结异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10834034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com