bytedance / mockey

a simple and easy-to-use golang mock library

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

添加WhenInstance语法糖

WAY29 opened this issue · comments

以下例子:

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()

我希望实现的是仅仅对某个结构体实例进行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
})

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