JUnits занимает слишком много времени из-за переполнения памяти кучи - PullRequest
0 голосов
/ 23 мая 2019

Для одного из проектов, над которым я работаю, мы написали jUnits, которые читают запросы из текстовых файлов, а затем вызывают методы. В реальных методах мы создаем отчеты в формате PDF, поэтому создаются объекты таблиц, документов и т. Д., Из-за чего память кучи, доступная для jUnits, очень быстро истощается, а jUnits занимает много времени.

Есть ли способ, с помощью которого я могу гарантировать, что после выполнения jUnit все объекты, созданные для него, будут получать мусор из памяти?

Я пытался использовать System.gc() метод в @AfterClass методах для каждого класса Test, но это не помогло. Кроме того, попытался увеличить размер кучи, но тот же результат. Используемая платформа Spring-boot 1.4.0 и JUnit версия 4.12.

1 Ответ

0 голосов
/ 23 мая 2019

System.gc() не гарантирует, что сборщик мусора будет работать.

Из документации JUnit

По своей структуре дерево экземпляров Test строится за один проход, затем тесты выполняются за второй проход. Бегущий по тесту содержит строгие ссылки на все экземпляры Test на время выполнения теста. Это означает, что при очень долгом тестовом прогоне со многими экземплярами Тестов ни один из тестов не может быть собран мусором до конца всего тестового прогона.

Поэтому, если вы выделяете внешние или ограниченные ресурсы в тесте, вы несете ответственность за освобождение этих ресурсов. Например, явное присвоение объекту значения null в методе tearDown () позволяет собирать мусор до конца всего запуска теста.

Короче. Убедитесь, что вы установили нулевые ссылки на объекты, когда закончите с ними

...