Юнит тест, если неуправляемые ресурсы очищены - PullRequest
1 голос
/ 11 февраля 2012

Я использую TDD и создаю модульные тесты для объектов System.IO.Stream, которые используют неуправляемые ресурсы.Мой проект состоит из множества таких потоков, и я хочу проверить, действительно ли реализации очищают свои неуправляемые ресурсы при их утилизации.

Есть идеи, как мне это сделать?

Возможно, сегодня утром я немного устаю, но все, что я могу придумать, - это создавать и использовать экземпляры 1k и смотреть на потребление памяти.они не прерывают тайм-аут от Read () ", поэтому, если есть какой-то отличный универсальный супер-фантастический способ тестирования потоков, который может оказаться актуальным.

1 Ответ

0 голосов
/ 11 февраля 2012

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

Однако подход TTD должен был бы вызвать исключение, которое ваш код должен обработать и выдать (желательно, но не всегда).Затем проведите тест, выберите его как ожидаемое исключение, а затем проверьте ресурсы, чтобы убедиться, что они были правильно убраны.Это, конечно, тестирование на известные ситуации, независимо от того, что немного сложнее.

Мы тоже используем много потоков, но в основном мы следовали FxCop и лучшему опыту, написали некоторые служебные процедуры и вспомогательные классы.После этого он религиозно использовал использование или реализацию IDisposable.

Еще одна вещь, которую я бы порекомендовал, это использование «полной» версии FileStream для чтения и записи на диск.

Вы нене вижу что-то вроде

XmlDocument doc = new XmlDocument()
doc.Load("myxml.xml");

Вместо этого мы делаем

XmlDocument doc = new XmlDocument()
using(FileStream fs = new FileStream("myxml.xml",FileMode.Open, FileAccess.Read))
{
  doc.load(fs);
}

Прибить как можно больше неизвестных, если выбранное вами божество улыбнется вам, это может привести их всех впрагматический и практический смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...