欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > golang编写UT:applyFunc和applyMethod区别

golang编写UT:applyFunc和applyMethod区别

2025/3/29 15:22:18 来源:https://blog.csdn.net/LeonNo11/article/details/146513045  浏览:    关键词:golang编写UT:applyFunc和applyMethod区别

GoConveygithub.com/smartystreets/goconvey/convey)中,ApplyFuncApplyMethod 都用于 mock(模拟)函数或方法,主要区别在于它们的作用对象不同:

函数作用对象用途
ApplyFunc普通函数Mock 一个全局函数或包级函数
ApplyMethod结构体方法Mock 某个结构体的实例方法

1️⃣ ApplyFunc 用于 Mock 普通函数

ApplyFunc 用于替换**包级函数(普通全局函数)**的实现,例如:

package mainimport ("fmt""testing". "github.com/smartystreets/goconvey/convey""github.com/smartystreets/goconvey/convey/gomock"
)// 目标函数
func GetData() string {return "Real Data"
}func TestApplyFunc(t *testing.T) {Convey("Mock GetData function", t, func() {// Mock GetData,使其返回 "Mocked Data"reset := gomock.ApplyFunc(GetData, func() string {return "Mocked Data"})defer reset() // 确保测试结束后恢复原函数So(GetData(), ShouldEqual, "Mocked Data") // 断言函数返回值})
}

🔹 原理ApplyFunc(GetData, mockImplementation) 拦截GetData 函数的调用,并让它返回 "Mocked Data"


2️⃣ ApplyMethod 用于 Mock 结构体方法

ApplyMethod 用于 mock 某个结构体实例的方法,例如:

package mainimport ("testing". "github.com/smartystreets/goconvey/convey""github.com/smartystreets/goconvey/convey/gomock"
)// 结构体
type UserService struct{}func (u *UserService) GetUserName() string {return "Real User"
}func TestApplyMethod(t *testing.T) {Convey("Mock UserService.GetUserName method", t, func() {// Mock 结构体的 GetUserName 方法reset := gomock.ApplyMethod((*UserService)(nil), "GetUserName", func(_ *UserService) string {return "Mocked User"})defer reset() // 确保测试结束后恢复原方法service := &UserService{}So(service.GetUserName(), ShouldEqual, "Mocked User") // 断言方法返回值})
}

🔹 原理

  • ApplyMethod((*UserService)(nil), "GetUserName", mockImplementation) 拦截了 所有 UserService 实例GetUserName 方法,使其返回 "Mocked User"

🎯 总结

方法Mock 目标使用示例
ApplyFunc普通函数ApplyFunc(GetData, mockFunc)
ApplyMethod结构体方法ApplyMethod((*UserService)(nil), "MethodName", mockFunc)
  • ApplyFunc 适用于:Mock 全局函数
  • ApplyMethod 适用于:Mock 某个结构体的实例方法

🚀 什么时候用?

  • 当你在 单元测试 里,需要 隔离依赖的外部函数方法,避免真实逻辑执行,或者控制返回值时,可以使用 ApplyFuncApplyMethod 来 Mock 这些函数/方法。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词