Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用标志运行和调试单元测试

使用标志运行和调试单元测试
EN

Stack Overflow用户
提问于 2022-09-08 02:45:24
回答 3查看 350关注 0票数 5

我希望能够使用测试资源管理器或代码镜头在VS代码中运行和调试单元测试。

但是为了运行我的测试,我需要添加以下标志:

代码语言:javascript
运行
AI代码解释
复制
-ldflags "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn" 

因此,在我的vscode settings.json文件中,添加了以下json:

代码语言:javascript
运行
AI代码解释
复制
"go.testFlags": [        
    "-ldflags",
    "\"-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn\""
]

现在,当我在测试资源管理器或代码镜头中单击Run Test按钮时,VS code将生成以下命令:

代码语言:javascript
运行
AI代码解释
复制
/opt/homebrew/bin/go test -timeout 30s -run ^TestCreateNamespace$ github.com/SomePath/SomeRepo/internal/models/v2 -ldflags "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn"

但是测试用例失败了,出现了以下错误:

代码语言:javascript
运行
AI代码解释
复制
panic: proto: extension number 1042 is already registered on message google.protobuf.FileOptions
See https://developers.google.com/protocol-buffers/docs/reference/go/faq#namespace-conflict

如果我在go测试命令中不支持-ldflags,那么这正是我所期望的错误。但令人惊讶的是,当我复制上面提到的完全相同的vs代码生成的测试命令并在我的终端中运行它时,测试用例就会通过。

除了运行Vs代码中的测试之外,我还希望能够通过设置断点和逐步执行代码来调试它们。

开发环境:,如果这件事重要的话,我在arm64苹果M1 Mac上。

更新:在修改了go.testFlags值之后,我发现:

  1. 此配置适用于vs代码run test功能:
代码语言:javascript
运行
AI代码解释
复制
"go.testFlags": [        
    "-ldflags",
    "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn"
]
  1. 此配置适用于vs代码debug test功能:
代码语言:javascript
运行
AI代码解释
复制
"go.testFlags": [        
    "-ldflags",
    "'-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn'"
]

(注意调试配置中的额外单引号)。

现在,我需要找到一个同时适用于run testdebug test功能的配置,或者在vs代码的settings.json文件中为run testdebug test指定两种不同的配置,这样我就可以使用这两种功能,而无需每次更改settings.json文件。(我怀疑这可能是件令人费解的事情)

EN

回答 3

Stack Overflow用户

发布于 2022-09-15 09:03:50

我不能代表VS代码,但是当涉及到调试测试时,这些测试需要更复杂的步骤(例如,godog黄瓜风格的测试),我通常会编译测试二进制代码,如下所示:

代码语言:javascript
运行
AI代码解释
复制
go test -c -gcflags="all=-N -l"

您可以用go test -c替换go build,所以我不明白为什么您不能简单地使用

代码语言:javascript
运行
AI代码解释
复制
go test -c -ldflags "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn" -gcflags="all=-N -l"

然后,您可以以无头模式启动dlv会话,供编辑器连接。假设go test -c生成了一个名为"foo.test“的二进制文件

代码语言:javascript
运行
AI代码解释
复制
dlv exec ./foo.test  --headless --listen=:2345 --log --api-version=2    -- -count=1 -- $(pwd)/some/path

如果-count=1是通常传递给go test的标志的占位符,那么-- $(pwd)/some/path可以是一个.feature文件的路径(如果您有黄瓜样式测试的话)。现在可以将编辑器连接到dlv会话并开始调试。在询问我的一些同事如何在VSCode中工作时,他们谈到了命令调色板和运行Debug: Open launch.json,它应该如下所示:

代码语言:javascript
运行
AI代码解释
复制
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug Test",
            "type": "go",
            "request": "attach",
            "mode": "remote",
            "port": 2345,
            "host": "127.0.0.1",
            "showLog":true,
            "trace":"log"
        }
    ]
}

设置断点,您应该能够打开调试面板并运行Debug test

如果有人想知道,Vim的流几乎是一样的,只是不需要json文件。使用vim-go插件,一旦dlv会话运行,就可以设置断点(:GoDebugBreakpoint),并连接到dlv::GoDebugConnect 127.0.0.1:2345

从那时起,它与任何调试会话:GoDebugContinue:GoDebugStep:GoDebugStepOut:GoDebugPrint varname等等几乎是一样的)

票数 3
EN

Stack Overflow用户

发布于 2022-09-11 04:19:52

你试过这个吗?

代码语言:javascript
运行
AI代码解释
复制
"go.testFlags": [        
    "-ldflags",
    "-X",
    "google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn"
]

在VSCode中创建新任务时,需要将每个空格分隔的单词/字符写入不同的参数。

票数 0
EN

Stack Overflow用户

发布于 2022-09-12 08:23:34

我建议使用发射配置而不是在settings.json中进行更改。

因此,您需要按照指示的.vscode/launch.json 这里创建一个文件,并将以下行添加到文件中:

代码语言:javascript
运行
AI代码解释
复制
"buildFlags": "-ldflags='-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn'",

它似乎既适用于运行,也适用于调试项目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73647814

复制
相关文章
爬虫--xpath匹配,requests库
使用xpath得到老师的图片链接和简介信息,并且把图片保存下来,老师简介保存到文本中; 要求: 杨老师的信息图片<img src="pics/ygf.jpg"> 图片保存的名字叫ygf.jpg,其他老师类似;并且都保存到当前目录下的image目录 杨老师的信息保存文件名叫“ygf.txt”,其他老师类似;并且保存到当前目录下的text目录 代码: import requests from lxml import etree import os def save(img_url, desc):
用户2337871
2019/07/19
5100
爬虫--xpath匹配,requests库
scala 模式匹配的几个模式
Scala 的模式匹配是类似与正则匹配的的模式匹配,但是不仅仅如此,它还可以匹配对象的内在的构建形式.
Tim在路上
2020/08/04
1.2K0
模式匹配
如果在不设置全文搜索的情况下,如何过滤查询结果,您会选择哪种方法?LIKE也许是最容易想到的:
yzsDBA
2021/02/03
9990
模式匹配
匹配操作符(绑定操作符): =~、!~ =~检验匹配是否成功:result= var =~ /abc/;若在该字符串中找到了该模式,则返回非零值,即true,不匹配则返回false。
生信补给站
2020/08/06
1.7K0
Scala 的模式匹配
最近开始学习 Scala,相较于学习 Haskell 的过程来看,Scala 真是直观得多,友好得多,更容易上手。以前写过关于从熟悉的 Java 和 JavaScript 来逐步学习 Groovy 和 Haskell 的文章,这以后再来学习 Scala 的话,就可以不断比较了。如果和我一样有 Java 经验的话但是从来没有接触过 Scala 的话,建议先阅读这篇文章,A Scala Tutorial for Java Programmers,一边比较,一边熟悉,同时配套的还有这个,Scala for Java programmers – Joakim Ohlrogge & Enno Runne,Youtube 上的视频,很直观,然后再从 Scala 官网的文档上面逐步涉入。
四火
2022/07/19
1K0
Scala 的模式匹配
Rust模式匹配
模式匹配是从函数式编程语言(例如:Haskell,Lisp)吸收而来的,用于为复杂的类型系统提供一个轻松的解构能力。rust使用match来提供模式匹配的功能。mathc类似于其它编程语言中的switch-case,但是远比switch-case强大。match的通用模式如下所示。
zy010101
2023/02/27
1.5K0
有趣的Scala模式匹配
它被称为模式匹配,模式匹配包含了一系列以case关键字开头的分支,每一个分支包含一个模式或者是多个表达式。模式有很多种,例如常量模式('*',1),变量模式(可以匹配任何值),通配模式(又见面了,'_'符号),构造方法模式(类似于样例类的初始化)等等。 用一个例子简单说明就是:
哒呵呵
2018/08/06
1.1K0
Rust中的模式匹配
在其它一些语言中,let x = 5 之类的语句,仅仅只是赋值语句。但是在rust中,可以换个角度理解,认为5这个值匹配到了x变量。如果觉得有些牵强,可以再来一个示例:
菩提树下的杨过
2021/11/30
1.9K0
Rust中的模式匹配
Swift中的模式匹配
Swift 作为一门现代语言,除去安全,快速等特性之外,还有个明显有别于其他语言的特性,就是巨量细致入微的语言特性。类似iOS API,初学者觉得繁杂,无从下手,但是熟悉之后,绝对能少写不少代码。
小刀c
2022/09/21
1.8K0
Scala 模式匹配
一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
王知无-import_bigdata
2019/03/19
8980
《模式识别与智能计算》基于PCA的模板匹配法
算法流程: 选取各类全体样本组成矩阵X,待测样品 计算协方差矩阵S 根据S的特征值选取适合的矩阵C 使用矩阵C降维 采用模板匹配开始多类别分类 算法实现 PCA降维算法 def pca(x,k=0,percent = 0.9): """ :function: 主成分分析法 :param X: 数据X m*n维 n表示特征个数,m表示数据个数 :param K: K表是要保留的维度 :param percent: 样本所占比例 :return: 返回特征向量
Max超
2020/01/16
7510
less中的匹配模式
首先来看如下的代码,一个 div 元素,分别设置了上下左右的宽度高度和颜色,然后在浏览器中打开发现四个不同的角都是一个小小的三角形如下
程序员 NEO
2023/09/29
2450
less中的匹配模式
朴素的模式匹配算法
子串(又称模式串)的定位操作通常称做串的模式匹配,是串中最重要的操作之一。朴素的匹配方法(BRUTE FORCE 算法,BF 算法)逻辑思路:
用户7737280
2021/11/10
1K0
Lua模式匹配
Lua并不使用POSIX规范的正则表达式[4](也写作regexp)来进行模式匹配。主要的原因出于程序大小方面的考虑:实现一个典型的符合POSIX标准的regexp大概需要4000行代码,这比整个Lua标准库加在一起都大。
sunsky
2020/08/20
1.8K0
模式匹配算法
模式匹配算法: 定义一个主串字符串S="goodgoogle",再定义一个模式串字符串T="google",然后依次遍历主串中的字符,判断,模式串是否在主串中存在,这种模式串的定位操作通常称为串的模式匹配 代码: 1 /** 2 * 朴素的模式匹配算法 3 * @author wydream 4 * 5 */ 6 7 public class OrdinaryModel { 8 9 public static void main(String[] args)
说故事的五公子
2019/09/11
9320
基于OpenCV的直方图匹配
如何为图像生成直方图,如何使直方图相等,最后如何将图像直方图修改为与其他直方图相似。
AI算法与图像处理
2020/12/07
1.4K0
Python的模式匹配库pampy
模式匹配即给定某种模式,用这种模式去检查序列或字符串是否符合这种模式,这种技术在自然语言处理中经常使用。
Python研究所
2022/06/17
6810
4.3 串的模式匹配算法
1、子串的定位操作通常称做串的模式匹配(其中T称为模式串),是各种串处理系统中最重要的操作之一。
小林C语言
2019/07/12
7240
Python匹配方式之xpath,还在用正则吗?一节课带你学会更简单的xpath
  XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
云飞
2018/09/14
7370
点击加载更多

相似问题

基于节点()包含()内容的Xpath匹配

14

基于属性引用的XPath节点匹配

37

基于匿名的模式匹配

10

基于OR逻辑的模式匹配

20

基于列表长度的匹配模式匹配

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档