go-kiss / monkey

Go语言猴子补丁框架
https://taoshu.in/go/monkey/
MIT License
119 stars 18 forks source link

重新支持全局打桩 #7

Closed taoso closed 2 years ago

taoso commented 2 years ago

本项目的亮点是分协程独立打桩。但今天发现一个必须使用全局打桩的场景。

Go 标准 http 客户端在发起请求的时候会调用底层的 Dialer 创建连接。 但创建连接的过程是在另外一个独立的协程执行的。如果只允许协程内打桩, 那就无法通过 mock Dialer 来改变 http 客户端的行为。

一种方式是 mock 更为上导致的 RoundTrip 对象。http 客户端对该对象的 操作是在同一个协程完成的。但作为通用库还是支持全局打桩比较好。

这次顺便移除了 PatchInstanceMethod 函数,其功能完全可以由 Patch 实现。