Одной из не очевидных задач, является тестирование кода, реализованного в финализаторе дотнетовского класса.
Данная заметка рассматривает один из способов решения этой задачи.
Например, есть классс 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: