bytedance / mockey

a simple and easy-to-use golang mock library
Apache License 2.0
556 stars 22 forks source link

添加WhenInstance语法糖 #54

Closed WAY29 closed 2 months ago

WAY29 commented 3 months ago

以下例子:

Mock(GetMethod(netAddr, "String")).When(func(self *net.TCPAddr) bool {
    return self == netAddr
}).To(func() string {
    return addr
}).Build()

希望可以简化成

Mock(GetMethod(netAddr, "String")).WhenInstance(netAddr).To(func() string {
    return addr
}).Build()
WAY29 commented 3 months ago

我希望实现的是仅仅对某个结构体实例进行mock,我现在不得不写类似于这样的代码:

mocknetAddrs := make(map[*net.TCPAddr]func() string)
addMockNetAddr := func(netAddr *net.TCPAddr, f func() string) {
mocknetAddrs[netAddr] = f
}

var netAddr *net.TCPAddr
var netAddrStringOriginFunc func() string

addMocker(
Mock(GetMethod(netAddr, "String")).
    Origin(&netAddrStringOriginFunc).
    To(func(self *net.TCPAddr) string {
        if f, ok := mocknetAddrs[self]; ok {
            return f()
        }
        return netAddrStringOriginFunc()
    }).Build(),
)
// ...
addMockNetAddr(netAddr, func() string {
    return addr
})
xhd2015 commented 2 months ago

在这个框架的基础上应该是解决不了的。