使用 gomonkey 遇到非 debug 模式执行失败的问题及解决方法
Posted CG国斌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 gomonkey 遇到非 debug 模式执行失败的问题及解决方法相关的知识,希望对你有一定的参考价值。
文章目录
问题描述
基于 Golang 语言,写单元测试,使用gomonkey
对于某个函数进行 Mock,遇到如下问题:
- 使用「正常模式」执行单元测试,
Patch
不生效,Mock 失败; - 使用「Debug模式」执行单元测试,
Patch
生效,Mock 成功。
说实话,看到这样的现象感觉很怪异,那么,为什么会出现这个问题呢?
解决方法
在网上搜了搜该问题及现象,发现该问题的原因是,
- 想要使
gomonkey
的Patch
生效,需要关闭编译器对代码的自动优化
但是在「正常模式」下,是没有关闭编译器对代码的自动优化的;而在「Debug模式」下,dlv
默认关闭了编译器对代码的自动优化。
因此,想要保证gomonkey
的Patch
生效,需要关闭编译器的自动优化功能。有两种方法,
- 方法1:
go test -gcflags "all=-N -l"
,直接在go test
命令行后面加上-gcflags "all=-N -l"
参数; - 方法2:使用 GoLand,在
Go Test
的配置项Go tool arguments
中,配置-gcflags "all=-N -l"
参数。
除此之外,大家也可参考「资料1」和「资料2」,里面也描述了该问题的原因及解决方法。
以上是关于使用 gomonkey 遇到非 debug 模式执行失败的问题及解决方法的主要内容,如果未能解决你的问题,请参考以下文章
使用 gomonkey 遇到非 debug 模式执行失败的问题及解决方法
使用 gomonkey 遇到非 debug 模式执行失败的问题及解决方法
使用 gomonkey Mock 函数及方法时遇到 panic: permission denied 的问题及解决方法
使用 gomonkey Mock 函数及方法时遇到 panic: permission denied 的问题及解决方法