Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как под капотом работает mockStatic ? / 4 сообщений из 4, страница 1 из 1
06.11.2018, 17:06
    #39728700
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как под капотом работает mockStatic ?
В общих чертах я понимаю как работает 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
07.11.2018, 08:59
    #39729011
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как под капотом работает mockStatic ?
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
07.11.2018, 15:26
    #39729358
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как под капотом работает mockStatic ?
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
07.11.2018, 19:43
    #39729553
Lelouch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как под капотом работает mockStatic ?
questioner,

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


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