vscode 无法调试 golang testify suite 中的单个 test 的解决办法

news/2024/11/16 21:53:25/文章来源:https://www.cnblogs.com/dongling/p/18200976

目录
  • 问题描述
  • 网上的讨论
  • 最终的解决办法

问题描述

对于如下这样简单的测试文件:

package main// Basic imports
import ("testing""github.com/stretchr/testify/assert""github.com/stretchr/testify/suite"
)var assertObj *assert.Assertions// Define the suite, and absorb the built-in basic suite
// functionality from testify - including a T() method which
// returns the current testing context
type ExampleTestSuite struct {suite.SuiteVariableThatShouldStartAtFive int
}// Make sure that VariableThatShouldStartAtFive is set to five
// before each test
func (suite *ExampleTestSuite) SetupTest() {suite.VariableThatShouldStartAtFive = 5assertObj = assert.New(suite.T())
}// All methods that begin with "Test" are run as tests within a
// suite.
func (suite *ExampleTestSuite) TestExample() {assertObj.Equal(5, suite.VariableThatShouldStartAtFive)suite.Equal(5, suite.VariableThatShouldStartAtFive)
}func (suite *ExampleTestSuite) TestExample2() {assertObj.NotEqual(51, suite.VariableThatShouldStartAtFive)
}// In order for 'go test' to run this suite, we need to create
// a normal test function and pass our suite to suite.Run
func TestExampleTestSuite(t *testing.T) {suite.Run(t, new(ExampleTestSuite))
}

点击 TestSuite 的某一个 Test* 方法上的 debug test,就会只调试这单个 test,这是符合预期的。

但是在一个复杂项目中,如果 TestSuite 对象的 Test* 方法分布于多个 *_test.go 文件中,这时想要单独执行某一个 Test*,就会出现 testing: warning: no tests to run 这样的错误提示:

网上的讨论

2022 年 4 月,github 上就有同样问题的讨论:
cannot debug single test in VS Code #1177
Failure to debug a suite test that is in a different file than the caller test #2414

一个回答是在 vscode 中使用 Go Nightly 插件来代替 Go 插件,收货 4 个点赞,看样子是可行的。

但是实际测试发现还是不行,替换插件后,重启了 vscode,依然不行。

最终的解决办法

参考这个回答:

.vscode/launch.json 中进行如下配置:

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Debug TestMethodOne","type": "go","request": "launch","mode": "test","program": "${workspaceFolder}/pkg/service/service_test.go","args": ["-test.run", "MyTestSuite/TestMethodOne"],},{"name": "Debug TestMethodTwo","type": "go","request": "launch","mode": "test","program": "${workspaceFolder}/pkg/service/service_test.go","args": ["-test.run", "MyTestSuite/TestMethodTwo"],}]
}

然后就可以在 vscode 的 Debug 页面中成功调试单个 test 实例了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/708996.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Deepin安装Anaconda后手动配置环境变量

配置环境变量 如果安装完毕后,重新打开终端,输入conda表示没找到这个命令 说明没有配置环境变量 那么我们首先第一件事,就是找到我们的conda安装到哪里了例如我的是安装到主目录的(默认在这的,安装的时候我没有修改安装路径) 然后进入这个文件夹,进入bin,在bin下运行终端…

Redis 缓存常见问题处理

缓存穿透 缓存穿透是指客户端的请求数据在缓存和数据库中都不存在,这样缓存永远不会生效,这些请求都会到达数据库,从而导致数据库负载过高。 常见解决方案有两种:缓存空对象:实现简单、方便维护,是解决缓存穿透的首选方法,但会造成额外内存消耗,或短期的数据不一致 布隆…

[原]代码管理工具WeCode及其数据导出

1.WeCode简介SVN、Git等工具适合多人协作时代码管理。类似在线的Gist(http://gist.github.com),WeCode是适合个人离线代码片段管理。wecode是CodeHelp的升级版本,是专门为我们程序员设计的一款源代码管理软件。 它能方便的管理您在编程和学习中有用的源代码,减少经常到处查找…

go高并发之路——go语言如何解决并发问题

一、选择GO的原因 作为一个后端开发,日常工作中接触最多的两门语言就是PHP和GO了。无可否认,PHP确实是最好的语言(手动狗头哈哈),写起来真的很舒爽,没有任何心智负担,字符串和整型压根就不用区分,开发速度真的是比GO快很多。现在工作中也还是有一些老项目在使用PHP,但…

线程安全使用 HashMap 的四种技巧

这篇文章,我们聊聊线程安全使用 HashMap 的四种技巧。1方法内部:每个线程使用单独的 HashMap 如下图,tomcat 接收到到请求后,依次调用控制器 Controller、服务层 Service 、数据库访问层的相关方法。 每次访问服务层方法 serviceMethod 时,都会在方法体内部创建一个单独的…

C - AtCoder Magics

C - AtCoder Magics https://atcoder.jp/contests/abc354/tasks/abc354_c思路 首先按照a属性对数列进行排序,大的在前,小的在后, 完成后, 则数列在a参数上是非递增的。 如下图中x轴对应 a 参数, y轴对应c参数, discard条件,实际上是找出 数列 对于c参数 沿着 a 参数非递…

『手撕Vue-CLI』添加自定义指令

前言 经上篇『手撕Vue-CLI』添加帮助和版本号的介绍之后,已经可以在控制台中输入 nue --help 来查看帮助信息了,但是在帮助信息中只有 --version,--help 这两个指令,而 vue-cli 中还有很多指令,例如 create,serve,build 等等,所以本章将继续添加自定义指令,例如 creat…

Web入门

SQL注入 数据库基础 *关系型数据库: #Access#MSSQL -- 1433*非关系型数据库: #MySQL -- 3306#Oracle -- 1521等对MySQL数据库的操作 1.显示数据库 show databases;2.显示数据库版本 select version(); 3.使用数据库 use XXX;4.显示当前正在使用的数据库 selec…

Linux常用命令-文件目录命令

Linux常用命令-文件目录命令1.目录命令 1.1、ls命令:显示目录下的内容 基本格式 [root@localhost ~]# ls [选项] [参数是文件名或目录名]常用选项 -a:显示所有文件。 --color=when。支持颜色输出,when的值默认是always(总显示颜色),never(不显示颜色)和auto(自动)。 -d:显…

asdf

asf本文版权归作者和博客园共有,欢迎转载,转载请注明原文链接:https://www.cnblogs.com/lllliuxiaoxia/p/18200863另外欢迎关注公众号,一起讨论学习