powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как под капотом работает mockStatic ?
4 сообщений из 4, страница 1 из 1
Как под капотом работает mockStatic ?
    #39728700
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общих чертах я понимаю как работает jdk Dynamic Proxy - на лету имплементит интерфейс и роутит вызов метода в интерсептор.
CgLib на лету лепит наследника.
Вычитал, что сейчас сделали ByteBuddy, которая близка по функционалу к CgLib( https://zeroturnaround.com/rebellabs/testing-the-performance-of-4-java-runtime-code-generators-cglib-javassist-jdk-proxy-byte-buddy - не понял что тут значит последняя строка в таблице), но быстрее и как минимум хибер и мокито уже переползли на него.

Так как CgLib использует наследование при кодогенереции, то есть ограничение, что класс не должен быть финальным, нельзя мокать приватные методы и статические. Но ведь в PowerMock это решили как-то. Объясните пожалуйста на верхнем уровне как это работает.
...
Рейтинг: 0 / 0
Как под капотом работает mockStatic ?
    #39729011
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

PowerMock uses a custom classloader and bytecode manipulation to enable mocking of static methods, constructors, final classes and methods, private methods, removal of static initializers and more.


Примерно так:
1) Загружаем .class файл как массив байт.
2) Модифицируем этот массив с помощью ASM / ByteBuddy / etc
3) Скармливаем полученный массив загрузчику классов
...
Рейтинг: 0 / 0
Как под капотом работает mockStatic ?
    #39729358
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouchquestioner,

PowerMock uses a custom classloader and bytecode manipulation to enable mocking of static methods, constructors, final classes and methods, private methods, removal of static initializers and more.


Примерно так:
1) Загружаем .class файл как массив байт.
2) Модифицируем этот массив с помощью ASM / ByteBuddy / etc
3) Скармливаем полученный массив загрузчику классов

а ByteBuddy/CGLib умеет делать прокси не через наследование? Или фишка в том, что Mockito использует прокси, а PowerMock именно модификацией байткода через ByteBuddy/CGLib ?
...
Рейтинг: 0 / 0
Как под капотом работает mockStatic ?
    #39729553
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

Как раз таки ByteBuddy/Javassist/CgLib (тут могу ошибаться) умеют не столько делать прокси, сколько генерировать или модифицировать классы. То что где-то они используются только чтобы «на лету делать наследника» не означает что они для этого сделаны:)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как под капотом работает mockStatic ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]