jjzjj

gomonkey

全部标签

聊一聊go的单元测试(goconvey、gomonkey、gomock)

文章目录概要一、测试框架1.1、testing1.2、stretchr/testify1.3、smartystreets/goconvey1.4、cweill/gotests二、打桩和mock2.1、打桩2.2、mock2.2.1、mockgen2.2.1、示例三、基准测试和模糊测试3.1、基准测试3.2、模糊测试四、总结4.1、小结4.2、其他4.3、参考资料概要软件测试是一个很宏大的概念,单元测试、集成测试、系统测试、黑盒测试、白盒测试、功能测试、性能测试、基准测试、压力测试等等都是软件测试下面的一种子概念。作为一名开发者,我们并不要理解每一种测试概念,但基准测试和单元测试在软件编写过程中

MAC M1芯片使用golang的mock打桩库gomonkey没有权限问题解决

MACM1芯片使用golang的mock打桩库gomonkey没有权限问题解决1.找到gomonkey库的源码文件modify_binary_darwin.go#找到gomonkey库所在的目录cd~/go/pkg/mod/github.com/agiledragon/gomonkey/v2@v2.9.0#编辑modify_binary_darwin.go文件,修改第七行sudovimmodify_binary_darwin.goerr:=mprotectCrossPage(target,len(bytes),syscall.PROT_READ|syscall.PROT_WRITE)

gomonkey源码解读

目录1、背景2、起因3、gomonkey是如何实现打桩的一个简单的gomonkey使用示例`gomonkey.ApplyFunc`执行流程`patch.go``jmp_amd64.go``modify_binary_linux.go`4、源码与实践中得出的问题与思考1、GoLandDebug可以正确mock函数,而Run却mock失败了?2、unsafe.Pointer和uintptr的区别3、如何理解getPointer()函数4、跳转指令为什么这么写?为何`replace(target,doubleuintptr)`函数传参时给的参数不一样?5、entryAddress的目的是啥?6、为何

使用 gomonkey Mock 函数及方法

文章目录前言函数方法参考前言在Golang语言中,写单元测试的时候,不可避免的会涉及到对其他函数及方法的Mock,即在假设其他函数及方法响应预期结果的同时,校验被测函数的响应是否符合预期。其中,在Mock其他函数及方法的时候,我们常用到的一个测试类库是「gomonkey」。特别地,对于方法和函数的Mock,略有差异,在这里我们就分别给出函数和方法Mock示例,方便大家参考。函数在Golang语言中,函数是没有接受者的方法,其形式为funcfunction_name([parameterlist])[return_types]{函数体}对于函数的Mock相对来说比较简单,假设我们对A函数进行单元

使用 gomonkey Mock 函数及方法

文章目录前言函数方法参考前言在Golang语言中,写单元测试的时候,不可避免的会涉及到对其他函数及方法的Mock,即在假设其他函数及方法响应预期结果的同时,校验被测函数的响应是否符合预期。其中,在Mock其他函数及方法的时候,我们常用到的一个测试类库是「gomonkey」。特别地,对于方法和函数的Mock,略有差异,在这里我们就分别给出函数和方法Mock示例,方便大家参考。函数在Golang语言中,函数是没有接受者的方法,其形式为funcfunction_name([parameterlist])[return_types]{函数体}对于函数的Mock相对来说比较简单,假设我们对A函数进行单元

使用 gomonkey 遇到非 debug 模式执行失败的问题及解决方法

文章目录问题描述解决方法问题描述基于Golang语言,写单元测试,使用gomonkey对于某个函数进行Mock,遇到如下问题:使用「正常模式」执行单元测试,Patch不生效,Mock失败;使用「Debug模式」执行单元测试,Patch生效,Mock成功。说实话,看到这样的现象感觉很怪异,那么,为什么会出现这个问题呢?解决方法在网上搜了搜该问题及现象,发现该问题的原因是,想要使gomonkey的Patch生效,需要关闭编译器对代码的自动优化但是在「正常模式」下,是没有关闭编译器对代码的自动优化的;而在「Debug模式」下,dlv默认关闭了编译器对代码的自动优化。因此,想要保证gomonkey的P

使用 gomonkey 遇到非 debug 模式执行失败的问题及解决方法

文章目录问题描述解决方法问题描述基于Golang语言,写单元测试,使用gomonkey对于某个函数进行Mock,遇到如下问题:使用「正常模式」执行单元测试,Patch不生效,Mock失败;使用「Debug模式」执行单元测试,Patch生效,Mock成功。说实话,看到这样的现象感觉很怪异,那么,为什么会出现这个问题呢?解决方法在网上搜了搜该问题及现象,发现该问题的原因是,想要使gomonkey的Patch生效,需要关闭编译器对代码的自动优化但是在「正常模式」下,是没有关闭编译器对代码的自动优化的;而在「Debug模式」下,dlv默认关闭了编译器对代码的自动优化。因此,想要保证gomonkey的P