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

欢迎大家使用和提意见

项目地址 https://github.com/xhd2015/xgo


Golang Go语言 xgo:一个基于 IR 重写的 golang mock 库
9 回复

行,关注了。

更多关于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无疑是一个值得尝试和学习的工具。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!