Как мне выполнить модульное тестирование финализатора?

У меня есть следующий класс, который является декоратором дляIDisposable объект (я опустил материал, который он добавляет), который сам реализуетIDisposable используя общий шаблон:

public class DisposableDecorator : IDisposable
{
    private readonly IDisposable _innerDisposable;

    public DisposableDecorator(IDisposable innerDisposable)
    {
        _innerDisposable = innerDisposable;
    }

    #region IDisposable Members

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    #endregion

    ~DisposableDecorator()
    {
        Dispose(false);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
            _innerDisposable.Dispose();
    }
}

Я могу легко проверить этоinnerDisposable расположен, когдаDispose() называется:

[Test]
public void Dispose__DisposesInnerDisposable()
{
    var mockInnerDisposable = new Mock<IDisposable>();

    new DisposableDecorator(mockInnerDisposable.Object).Dispose();

    mockInnerDisposable.Verify(x => x.Dispose());
}

Но как мне написать тест, чтобы убедиться,innerDisposable делаетне избавиться от финализатора? Я хочу написать что-то вроде этого, но это не удается, предположительно, потому что финализатор не был вызван потоком GC:

[Test]
public void Finalizer__DoesNotDisposeInnerDisposable()
{
    var mockInnerDisposable = new Mock<IDisposable>();

    new DisposableDecorator(mockInnerDisposable.Object);
    GC.Collect();

    mockInnerDisposable.Verify(x => x.Dispose(), Times.Never());
}

Ответы на вопрос(0)

Ваш ответ на вопрос