Могу ли я порекомендовать альтернативный подход? Вместо этого вы можете использовать аспектно-ориентированный подход, используя AspectJ . При этом вы можете определить точечные вызовы вокруг подмножества или всех методов, которые вы хотите отслеживать.
Другой вариант: если вы хотите отслеживать покрытие кода (тот факт, что вы используете JUnit и просто хотите сделать System.out.println(...)
- это хороший намек на это), возможно, вы ищете инструмент покрытия кода ? Если это так, Cobertura будет вашим лучшим выбором - не требуется никакого специального кодирования.
Обе эти опции выполняют свои собственные манипуляции с байт-кодом, но не являются тем, что должно поддерживаться разработчиком.
Если вы используете Eclipse в качестве своей IDE, оба эти соединения очень хорошо подходят для Eclipse. AspectJ на самом деле является проектом Eclipse, но не требует Eclipse. Подключаемый модуль Eclipse для Cobertura: eCobertura .
Еще один вариант для этого - сделать это внутри самого JUnit - и это не потребует манипулирования байт-кодом. Взгляните на его TestWatchman
класс. У меня пока нет этого документированного онлайн, как и с другими моими библиотеками, но вы можете взглянуть на мой класс BaseTest
как часть моей библиотеки утилит JUnit . Любой тестовый класс JUnit, который расширяет это, будет автоматически регистрироваться (в SLF4J), когда каждый тест начинается, успешно или неудачно. Тем не менее, это все только на уровне тестирования и не поможет контролировать другие методы, которые запускает каждый тест.