技术标签: golang glog文件名命令 自己写代码没有main方法怎么测试 go 基准测试 找不到函数
其实在很长一段时间,包括现在,我都很不喜欢写单元测试。因为维护单元测试的成本很高。只有接口做了一点变更,那么单元测试就必须做相同的变更,否则会导致测试不通过。
那么反过来,只要每次在提交代码都去运行一次单元测试。这样可以很快的检查到你对代码更改是否影响了正常的业务逻辑,当然很大一部分是可能是别人写的那部分代码。因为你不确定本次的修改是否会影响到别人的那部分。所以单元测试还是很有必要的。
go语言中单元测试是开箱即用的,官方提供了test
包。不用像PHP中需要单独配置unit
。
go test
命令是golang
单元测试的最基本使用
go test -v
是我们比较常用的一个测试命令,用于执行测试,并打印额外的输出。
新建一个项目用于示例
test
│ main.go
│ main_test.go
可以看到我在main.go
的同级目录创建了一个main_test.go
。go
语言中,单元测试的代码必须跟需要测试的代码在同一个包里面。且命名必须遵循上面的那种结构规范,即:文件名_test.go
我在main.go
中创建两个函数来分别得到字符串相加的结果。
func JoinStrUseSprint(a,b string) string {
return fmt.Sprintf("%s%s",a,b)
}
func JoinStrUseNor(a,b string) string {
return a+b
}
main_test.go
中的测试代码
import "testing"
func TestJoinStrUseNor(t *testing.T) {
c := JoinStrUseNor("aaa","bbb")
t.Log(c)
}
func TestJoinStrUseSprint(t *testing.T) {
c := JoinStrUseSprint("aaa","bbb")
t.Log(c)
}
测试代码中使用了 testing
包。而且每个测试函数必须是以Test
开头,有且只有一个参数t *testing.T
.t.Log()
函数为输出一段Log
日志 这样一个简单的单元测试就完成了。
这个时候我们运行go test
,结果如下。
test>go test
PASS
ok test 0.360s
可以看到测试通过了。但是发现并没有我们期望的日志输出。如果我们要得到输出的结果,我们需要一个额外的参数,具体命令如下:
test>go test -v
=== RUN TestJoinStrUseNor
--- PASS: TestJoinStrUseNor (0.00s)
main_test.go:7: aaabbb
=== RUN TestJoinStrUseSprint
--- PASS: TestJoinStrUseSprint (0.00s)
main_test.go:12: aaabbb
PASS
ok test 0.480s
这个时候就可以看到很详细的测试流程与输出的测试的log
。
很多时间我们需要看单元测试的覆盖率,这个时候我们就需要
go test -cover
了。
我们同样使用上面的代码。
test>go test -cover
PASS
coverage: 100.0% of statements
ok test 0.440s
可以看到单元代码覆盖率是100%
。这个是我们在main
文件里面在增加一个函数。
func JoinStrUseSprint(a,b string) string {
return fmt.Sprintf("%s%s",a,b)
}
func JoinStrUseNor(a,b string) string {
return a+b
}
func Run() {
fmt.Println("I'm run,and I'm happy!")
}
然后再执行cover
,得到了覆盖率为66.7
。
test>go test -cover
PASS
coverage: 66.7% of statements
ok test 0.398s
当然-v -cover
是可以同事使用的。
test>go test -cover -v
=== RUN TestJoinStrUseNor
--- PASS: TestJoinStrUseNor (0.00s)
main_test.go:7: aaabbb
=== RUN TestJoinStrUseSprint
--- PASS: TestJoinStrUseSprint (0.00s)
main_test.go:12: aaabbb
PASS
coverage: 66.7% of statements
ok test 0.429s
很多时候我们需要将单元测试覆盖率写到一个文件中,这时候我们再-cover
中增加一些额外的参数
>go test -coverprofile test.cover
>go tool cover -html=test.cover -o coverage.html
-coverprofile filename
将覆盖率的profile
写入指定文件中。go tool cover -html=test.cover -o coverage.html
将覆盖率的文件写入可视化的html文件中 打开converage.html
如下图: 其实这里可以借用一个很好的第三方包。
go get github.com/smartystreets/goconvey
安装完成,直接再项目目录下执行
test>goconvey
2020/05/16 21:46:43 goconvey.go:61: Initial configuration: [host: 127.0.0.1] [port: 8080] [poll: 250ms] [cover: true]
2020/05/16 21:46:43 tester.go:19: Now configured to test 10 packages concurrently.
2020/05/16 21:46:43 goconvey.go:178: Serving HTTP at: http://127.0.0.1:8080
2020/05/16 21:46:43 integration.go:122: File system state modified, publishing current folders... 0 3179270049
2020/05/16 21:46:43 goconvey.go:118: Received request from watcher to execute tests...
2020/05/16 21:46:43 goconvey.go:105: Launching browser on 127.0.0.1:8080
2020/05/16 21:46:43 goconvey.go:111: exec: "start": executable file not found in %PATH%
2020/05/16 21:46:43 goconvey.go:113:
2020/05/16 21:46:44 executor.go:69: Executor status: 'executing'
2020/05/16 21:46:44 coordinator.go:46: Executing concurrent tests: test
2020/05/16 21:46:45 parser.go:24: [passed]: test
按照提示打开http://127.0.0.1:8080/
就会得到一个很炫酷的覆盖率界面
Golang
单元测试的基础今天就暂时到这里面,下面几个testing
包的常用断言方法.
// 输出测试日志
t.Logf()
t.Logf()
// 标记错误,但仍然执行后面的语句
t.Fail()
// 获取是否当前用例是执行错误的
t.Failed()
// 错误输出,等于 t.Logf 再执行 t.Fail()
t.Errorf("%s", "run ErrorF")
// 标记函数错误,并中断后面的执行
t.FailNow()
// 致命错误输出,等同于调用了 t.Logf 然后调用 t.FailNow()
t.Fatalf("%s", "run Fatelf")
下一篇我们会写到 golang
中的一些基准测试,以及一些测试的工具。
更多学习内容,同步更新到公众号,期待与您一起交流
http://weixin.qq.com/r/hTjq8tLEBI97rZaR922X (二维码自动识别)
文章浏览阅读290次,点赞8次,收藏10次。1.背景介绍稀疏编码是一种用于处理稀疏数据的编码技术,其主要应用于信息传输、存储和处理等领域。稀疏数据是指数据中大部分元素为零或近似于零的数据,例如文本、图像、音频、视频等。稀疏编码的核心思想是将稀疏数据表示为非零元素和它们对应的位置信息,从而减少存储空间和计算复杂度。稀疏编码的研究起源于1990年代,随着大数据时代的到来,稀疏编码技术的应用范围和影响力不断扩大。目前,稀疏编码已经成为计算...
文章浏览阅读217次。EasyGBS - GB28181 国标方案安装使用文档下载安装包下载,正式使用需商业授权, 功能一致在线演示在线API架构图EasySIPCMSSIP 中心信令服务, 单节点, 自带一个 Redis Server, 随 EasySIPCMS 自启动, 不需要手动运行EasySIPSMSSIP 流媒体服务, 根..._easygbs-windows-2.6.0-23042316使用文档
文章浏览阅读1.2k次,点赞27次,收藏7次。2023巅峰极客 BabyURL之前AliyunCTF Bypassit I这题考查了这样一条链子:其实就是Jackson的原生反序列化利用今天复现的这题也是大同小异,一起来整一下。_原生jackson 反序列化链子
文章浏览阅读734次,点赞9次,收藏7次。微服务架构简单的说就是将单体应用进一步拆分,拆分成更小的服务,每个服务都是一个可以独立运行的项目。这么多小服务,如何管理他们?(服务治理 注册中心[服务注册 发现 剔除])这么多小服务,他们之间如何通讯?这么多小服务,客户端怎么访问他们?(网关)这么多小服务,一旦出现问题了,应该如何自处理?(容错)这么多小服务,一旦出现问题了,应该如何排错?(链路追踪)对于上面的问题,是任何一个微服务设计者都不能绕过去的,因此大部分的微服务产品都针对每一个问题提供了相应的组件来解决它们。_spring cloud
文章浏览阅读5.9k次,点赞6次,收藏20次。Js实现图片点击切换与轮播图片点击切换<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/ja..._点击图片进行轮播图切换
文章浏览阅读10w+次,点赞245次,收藏1.5k次。在开始安装前,如果你的电脑装过tensorflow,请先把他们卸载干净,包括依赖的包(tensorflow-estimator、tensorboard、tensorflow、keras-applications、keras-preprocessing),不然后续安装了tensorflow-gpu可能会出现找不到cuda的问题。cuda、cudnn。..._tensorflow gpu版本安装
文章浏览阅读243次。0x00 简介权限滥用漏洞一般归类于逻辑问题,是指服务端功能开放过多或权限限制不严格,导致攻击者可以通过直接或间接调用的方式达到攻击效果。随着物联网时代的到来,这种漏洞已经屡见不鲜,各种漏洞组合利用也是千奇百怪、五花八门,这里总结漏洞是为了更好地应对和预防,如有不妥之处还请业内人士多多指教。0x01 背景2014年4月,在比特币飞涨的时代某网站曾经..._使用物联网漏洞的使用者
文章浏览阅读786次。A. Epipolar geometry and triangulationThe epipolar geometry mainly adopts the feature point method, such as SIFT, SURF and ORB, etc. to obtain the feature points corresponding to two frames of images. As shown in Figure 1, let the first image be and th_normalized plane coordinates
文章浏览阅读708次,点赞2次,收藏3次。开放信息抽取(OIE)系统(三)-- 第二代开放信息抽取系统(人工规则, rule-based, 先关系再实体)一.第二代开放信息抽取系统背景 第一代开放信息抽取系统(Open Information Extraction, OIE, learning-based, 自学习, 先抽取实体)通常抽取大量冗余信息,为了消除这些冗余信息,诞生了第二代开放信息抽取系统。二.第二代开放信息抽取系统历史第二代开放信息抽取系统着眼于解决第一代系统的三大问题: 大量非信息性提取(即省略关键信息的提取)、_语义角色增强的关系抽取
文章浏览阅读1.1w次,点赞6次,收藏51次。快速完成网页设计,10个顶尖响应式HTML5网页模板助你一臂之力为了寻找一个优质的网页模板,网页设计师和开发者往往可能会花上大半天的时间。不过幸运的是,现在的网页设计师和开发人员已经开始共享HTML5,Bootstrap和CSS3中的免费网页模板资源。鉴于网站模板的灵活性和强大的功能,现在广大设计师和开发者对html5网站的实际需求日益增长。为了造福大众,Mockplus的小伙伴整理了2018年最..._html欢迎页面
文章浏览阅读282次。原标题:2018全国计算机等级考试调整,一、二级都增加了考试科目全国计算机等级考试将于9月15-17日举行。在备考的最后冲刺阶段,小编为大家整理了今年新公布的全国计算机等级考试调整方案,希望对备考的小伙伴有所帮助,快随小编往下看吧!从2018年3月开始,全国计算机等级考试实施2018版考试大纲,并按新体系开考各个考试级别。具体调整内容如下:一、考试级别及科目1.一级新增“网络安全素质教育”科目(代..._计算机二级增报科目什么意思
文章浏览阅读240次。conan简单使用。_apt install conan