1.
Я не думаю, что ваш tearDown
делает всю массу полезных вещей. Ваши тестовые примеры обычно выполняются на другом VM
с производственного сервера VM
s, поэтому нет необходимости быть настолько осторожным в отношении GC
(если это намерение установить макеты на null
). Ошибочные объекты среди заглушек, создаваемые вашими тестовыми классами, будут иметь право на GC
, как только они выйдут из сферы действия, что в худшем случае, после выполнения всех тестовых случаев и выхода из JVM
.
Конечно, это может помочь garbage-collector
вернуть эти ресурсы раньше, чем без него, но если вы не используете действительно большой набор модульных тестов, это не может быть проблемой.
Если, с другой стороны, идея состоит в том, чтобы убедиться, что изменения, внесенные в макет объектов одним методом тестирования, не влияют на другой последующий метод тестирования, это имеет смысл несколько.
Не переусердствуйте с этими fixtures
- имейте что-то для установки для последующих тестовых примеров? Сделайте это в методе @Before
аннотированный setUp
. Есть что-то вроде очистки ресурсов, таких как соединения с базой данных и системные ресурсы? Сделайте это в After
аннотированный метод tearDown
.
Как правило, вы даже не можете написать метод tearDown
, если вы не столкнулись с одним из вышеуказанных требований, в отличие от метода setUp
, который может оказаться для вас гораздо более полезным.
2.
Моя первая точка выше частично отвечает на ваши вопросы, связанные с объемом памяти. Не нужно быть осторожным с модульными тестами.
Обычно вы не пишете модульные тесты, которые являются длительными процессами.
Кроме того, создание объектов ближе к тому месту, где вы их используете, и ограничение их объема и воздействия на требуемый минимум, как правило, является хорошей практикой - поэтому, если вы не планируете повторно использовать объекты/макеты, не стесняйтесь их создавать (и тем самым заставить их выйти из сферы действия, как только метод тестирования завершит выполнение) в ваших методах тестирования.