前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 gomonkey 遇到非 debug 模式执行失败的问题及解决方法

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

作者头像
CG国斌
发布2022-06-02 13:58:01
1.5K0
发布2022-06-02 13:58:01
举报
文章被收录于专栏:维C果糖

文章目录

问题描述

基于 Golang 语言,写单元测试,使用gomonkey对于某个函数进行 Mock,遇到如下问题:

  • 使用「正常模式」执行单元测试,Patch不生效,Mock 失败;
  • 使用「Debug模式」执行单元测试,Patch生效,Mock 成功。

说实话,看到这样的现象感觉很怪异,那么,为什么会出现这个问题呢?

解决方法

在网上搜了搜该问题及现象,发现该问题的原因是,

  • 想要使gomonkeyPatch生效,需要关闭编译器对代码的自动优化

但是在「正常模式」下,是没有关闭编译器对代码的自动优化的;而在「Debug模式」下,dlv默认关闭了编译器对代码的自动优化。

因此,想要保证gomonkeyPatch生效,需要关闭编译器的自动优化功能。有两种方法,

  • 方法1go test -gcflags "all=-N -l" ,直接在go test命令行后面加上-gcflags "all=-N -l" 参数;
  • 方法2:使用 GoLand,在Go Test的配置项Go tool arguments中,配置-gcflags "all=-N -l" 参数。

除此之外,大家也可参考「资料1」和「资料2」,里面也描述了该问题的原因及解决方法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 问题描述
  • 解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档