Golang Go语言 xgo:一个基于 IR 重写的 golang mock 库
最近基于工作需要,在使用了 gomonkey 遇到很多问题之后,并且也担心基于 Assembly 的方式对未来单测维护的不可持续性,开发了 xgo 。
xgo 基于 IR 中间码重写,更加贴近源代码而不是机器码。所以兼容性比 Assembly 要好很多,功能也更强。
下面是一个简单的示例:
package demo
import ( “context” “testing”
"github.com/xhd2015/xgo/runtime/core" "github.com/xhd2015/xgo/runtime/mock"
)
func MyFunc() string { return “my func” } func TestFuncMock(t *testing.T) { mock.Mock(MyFunc, func(ctx context.Context, fn *core.FuncInfo, args core.Object, results core.Object) error { results.GetFieldIndex(0).Set(“mock func”) return nil }) text := MyFunc() if text != “mock func” { t.Fatalf(“expect MyFunc() to be ‘mock func’, actual: %s”, text) } }
欢迎大家使用和提意见
Golang Go语言 xgo:一个基于 IR 重写的 golang mock 库
行,关注了。
更多关于Golang Go语言 xgo:一个基于 IR 重写的 golang mock 库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
说明一下:该 mock 不需要基于接口进行 monkey ,开箱可用😃
点个赞
感谢,可以一起交流😌
有点意思,和我这个项目的功能有点类似,不过实现思路不太一样 :-)
https://github.com/go-kod/kod
目标不一样,这个是单元测试场景,主打无代码侵入,无代码生成
嗯,我这个是为了优化代码模块设计,同时解决单元测试标准化的问题
不过个人感觉单元测试的最佳实践还是 mock interface ,patch 不够直观
哈哈,我持相反的看法
针对帖子“Golang Go语言 xgo:一个基于 IR 重写的 golang mock 库”的内容,作为IT领域Go语言方面的专家,以下是我的回复:
xgo实际上是一个为Go程序员提供强大功能的预处理器,而非仅仅是一个基于IR(中间表示)重写的mock库。它可以与Go编译器协同工作,为Go程序添加额外的能力,如在运行时对函数调用进行拦截、模拟和跟踪。这些功能使得单元测试和调试变得更加简单快捷。
关于xgo的mock功能,它允许开发者在测试中模拟外部服务或依赖项,从而确保测试的隔离性和可控性。此外,xgo还支持函数捕获和跟踪功能,可以捕获并控制任意函数的执行流程,并记录整个调用堆栈信息,这对于调试复杂系统非常有用。
然而,将xgo仅描述为“一个基于IR重写的golang mock库”可能过于片面。xgo的更多特性和优势还包括全面的Go版本支持、平台兼容性、安装便捷性以及与Go编译器的深度集成等。
总之,xgo是一个功能强大的Go开发工具,它提供了丰富的API和工具来帮助开发者编写更高质量的代码。对于Go开发者来说,xgo无疑是一个值得尝试和学习的工具。