|
Как под капотом работает mockStatic ?
|
|||
---|---|---|---|
#18+
В общих чертах я понимаю как работает 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 это решили как-то. Объясните пожалуйста на верхнем уровне как это работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 17:06 |
|
Как под капотом работает mockStatic ?
|
|||
---|---|---|---|
#18+
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) Скармливаем полученный массив загрузчику классов ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 08:59 |
|
Как под капотом работает mockStatic ?
|
|||
---|---|---|---|
#18+
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 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 15:26 |
|
Как под капотом работает mockStatic ?
|
|||
---|---|---|---|
#18+
questioner, Как раз таки ByteBuddy/Javassist/CgLib (тут могу ошибаться) умеют не столько делать прокси, сколько генерировать или модифицировать классы. То что где-то они используются только чтобы «на лету делать наследника» не означает что они для этого сделаны:) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 19:43 |
|
|
start [/forum/topic.php?fid=59&fpage=37&tid=2121672]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 140ms |
0 / 0 |