Monday, June 10, 2013

Как тестировать код финализатора (c#)

Одной из не очевидных задач, является тестирование кода, реализованного в финализаторе дотнетовского класса.
Данная заметка рассматривает один из способов решения этой задачи.


Например, есть классс MyTemporaryFile (временный файл), который создает уникальный временный файл в конструкторе и должен удалять его в Dipose() или в финализаторе.

    public class MyTemporaryFile : IDisposable
    {
        public string FileName { private set; get; }
        public MyTemporaryFile()
        {
            FileName = Path.GetTempFileName();
        }

        public void Dispose()
        {
            Dispose(true);
        }
        ~MyTemporaryFile()
        {
            Dispose(false);
        }

        void Dispose(bool disposing)
        {
            if (disposing)
            {
                GC.SuppressFinalize(this);
            }
            DeleteFile();
        }
        void DeleteFile()
        {
            if (FileName != null)
            {
                File.Delete(FileName);
                FileName = null;
            }
        }
    }



Реализация паттерна Dispose довольно стандартная и обсуждалась на Хабре. Наверняка есть в данной реализации некоторые тонкие места, поэтому в «настоящей» программе имейте это ввиду.

Но почему то я не нашел обсуждения вопроса, а как же тестировать код, реализованный в финализаторе.

Read more: Habrahabr.ru
QR: Inline image 1