gpt4 book ai didi

c# - 如何确保在 IDisposable 对象上调用了 Dispose 方法,并在可能的情况下将其集成到持续集成中?

转载 作者:行者123 更新时间:2023-11-30 22:50:14 25 4
gpt4 key购买 nike

通常不调用 Dispose 表示可能存在错误或草率代码,并可能导致一些难以发现的错误。理想情况下,我想发现在单元测试期间是否未调用 Disposed。

我们使用的方法之一是将 Debug.Assert 放在 Finalizer 中

#if DEBUG
~MyClass()
{
Debug.Assert(false, “MyClass.Dispose() was not called”);
}
#endif

我们发现自己点击断言消息框,但它不能很好地与会忽略弹出窗口的持续集成构建一起工作。

最佳答案

如果您以某种方式记录它而不是使用 Debug.Assert,并使用依赖注入(inject)来指定您的记录器实现,那么您可以使用模拟测试来捕获它。所以,您的类可能在其构造函数中采用记录器实例,或提供默认实例,然后表现如下:

public MyClass : IDisposable
{

IEventLogger _eventLogger;

public MyClass() : this(EventLogger.CreateDefaultInstance())
{
}

public MyClass(IEventLogger eventLogger)
{
_eventLogger = eventLogger;
}

// IDisposable stuff...

#if DEBUG
~MyClass()
{
_eventLogger.LogError("MyClass.Dispose() was not called");
}
#endif

}

关于c# - 如何确保在 IDisposable 对象上调用了 Dispose 方法,并在可能的情况下将其集成到持续集成中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686923/

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