【Golang】解决Go test执行单个测试文件提示未定义问题

chatgpt/2023/10/4 8:16:14

目录

背景

根本原因

解决方法

解决

多级引用或多个引用包的情况

总结

 资料获取方法


背景

很多人记录过怎么执行Go test单个文件或者单个函数,但是要么对执行单文件用例存在函数或变量引用的场景避而不谈,要么提示调用了其它文件中的模块会报错。其实了解了go test命令的机制之后,这个问题就迎刃而解了。

也是一个同事向我求助我才知道有这样一个问题存在,因为场景特殊他只想执行我们的测试代码其中一个文件中的测试代码,因为调用的信息都在同一目录(package)下,原代码执行是不存在引用问题的,直接执行go test也是可以运行的,但是单独运行其中一个文件时,出现了下面的错误:

bingo@Mac Interface_test$ go test -v getinfo_test.go 
# command-line-arguments
./getinfo_test.go:34:23: undefined: touch
./getinfo_test.go:35:23: undefined: verify
...
FAIL	command-line-arguments [build failed]

这也许是很多数人会遇到的一个错误,搜索引擎上没有找到相关的信息,有的人做了相关的记录来提示后来人:执行单文件存在引用时会报错。

这可能也是使用golang 做测试的弊端,因为发展时间不长,没有像Python或者Java那样成熟的社区;废话不多说,我们一起来看看这个问题为什么会发生。

根本原因

其实从看看上面的这段提示:build failed,构建失败,我们应该就能看出一下信息。go test与其他的指定源码文件进行编译或运行的命令程序一样(参考:go rungo build),会为指定的源码文件生成一个虚拟代码包——“command-line-arguments”,对于运行这次测试的命令程序来说,测试源码文件getinfo_test.go是属于代码包“command-line-arguments”的,可是它引用了其他包中的数据并不属于代码包“command-line-arguments”,编译不通过,错误自然发生了。

解决方法

解决

知道了原因之后,解决的方法就出来了,执行命令时加入这个测试文件需要引用的源码文件在命令行后方的文件都会被加载到command-line-arguments中进行编译。。示例如下:

bingo@Mac Interface_test$ go test -v getinfo_test.go  lib.go 
ok      command-line-arguments  0.008s

多级引用或多个引用包的情况

如果对多个包存在引用关系,或者引用的包对当前目录的其他文件存在引用,也都是一样的方法,把他们加在命令后方即可。

下面这个是一个多引用包的实例:

总结

 测试单个文件,一定要带上被测试的原文件,如果原文件有其他引用,也需一并带上。


 资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

wxwidgets Ribbon构建多个page与按钮响应

新建一个控制台应用程序,添加好头文件的依赖与lib库文件的依赖,修改属性: 将进入ribbon界面的文件与主界面的类分开: 1、RibbonSample.cpp #include "stdafx.h" #include "MyFrame.h" class MyApp : public…

探索自除数:发现区间内的神奇数字

本篇博客会讲解力扣“728. 自除数”的解题思路,这是题目链接。 对于给定的正整数num,我们如何判断它是不是自除数呢?根据定义,我们只需要把num的每一位数字都取出来,判断能不能整除num,如果发现num的某一位…

学习记录——DSConv

Dynamic Snake Convolution based on Topological Geometric Constraints for Tubular Structure Segmentation ICCV 2023 用于管状结构分割的动态蛇形卷积 仍存在一些复杂的领域,大模型还未能够很好的覆盖(也许只是时间问题)。例如伪装目标…

mysql的整体架构

服务层-引擎层-硬盘层 一条语句执行的整体过程: 先建立连接(mysql -h -p 密码)–预处理-词法分析-语法分析-优化器选择用什么索引表如何连接等-执行器 到这里都是属于server层,大多数功能包括视图,存储过程,触发器都是…

树莓派微型 web 服务器——正式设计报告

树莓派微型web服务器 摘要 这篇博客介绍了一个基于树莓派的轻量级服务器项目。树莓派是一款低成本、小型化的单板计算机,具有较低的功耗和良好的可扩展性。该项目利用树莓派搭建了一个功能简洁但性能稳定的服务器环境,适用于小型应用或个人使用。该轻量…

【Linux】yum工具的认识及使用

【Linux】yum工具的认识及使用 1.知识点补充2.yum是什么3.yum常用指令3.1查看软件安装包3.1.1关于rzsz 3.2安装软件3.3卸载软件 4.yum扩展4.1扩展14.2扩展24.3扩展3 什么是工具? 本质上也是指令 1.知识点补充 1.我们一般安装软件,是不是需要把软件安装…

超详细 | 模拟退火算法及其MATLAB实现

模拟退火算法(simulated annealing,SA)是20世纪80年代初期发展起来的一种求解大规模组合优化问题的随机性方法。它以优化问题的求解与物理系统退火过程的相似性为基础,利用Metropolis算法并适当地控制温度的下降过程实现模拟退火,从而达到求解…
推荐文章