AlexStocks / getty

a netty like asynchronous network I/O library based on tcp/udp/websocket; a bidirectional RPC framework based on JSON/Protobuf; a microservice framework based on zookeeper/etcd
Apache License 2.0
888 stars 186 forks source link

Unable to mock getty.Session interface, due to composition with unexported functions in getty.Connection. #71

Open iSuperCoder opened 1 year ago

iSuperCoder commented 1 year ago

What would you like to be added: To resolve this problem, it is necessary to modify all the functions defined in getty.Connection to be exported with uppercase names.

Why is this needed: Seata-go references getty, and encountered obstacles when writing unit tests related to the getty.Session interface. Neither gomock nor gomonkey can mock the getty.Session interface.

The issue arises from the fact that the getty.Connection interface defines lowercase unexported functions, and the getty.Session interface composes getty.Connection, making it impossible to mock getty.Session from outside the getty package.

iSuperCoder commented 1 year ago

gomonkey can stub non-exported private functions, but the prerequisite is to have a struct instance. Due to the aforementioned issue with getty.Connection, it's not possible to create a getty.Session interface instance outside the getty package.