go语言中的test命令有很多参数。test命令及其提供的参数如何使用,能做什么?本文做了详细的解读。有没有想过直接使用IDE进行单元测试时它是如何工作的?比如GoLand写的测试用例。所有代码都需要编写测试用例。这不仅是对自己的代码负责,也是对别人的负责。最近在工作中使用glog这个库,因为它对外提供的方法很简单,想封装一下。但是遇到了一点小麻烦:这个包需要在命令行传递log_dir参数来指定日志文件的路径。因此,要正常运行,首先需要编译出可执行文件,然后在命令行中指定参数执行。下面的例子:gobuildmain.go./main-log_dir="/data"//当前目录作为日志输出目录,但是在gotest中如何指定这个参数呢?测试调查发现gotest也可以生成可执行文件。需要用-c来指定。例子如下:gotest-cparam_test_dir//最后一个参数是要测试的目录,执行后会找到:这样,所有的Testcase都会运行。如何只执行某个测试用例(编译器是怎么做的?)。这里还有一个属性-run,用来指定执行的测试用例的匹配方式。例如:funcTestGetRootLogger(t*testing.T){writeLog("Testing")}funcTestGetRootLogger2(t*testing.T){writeLog("Testing2")}当我在命令行显式匹配并执行Logger2时,运行它确实只有测试用例gotest-v-runLogger2./util///-v表示verbose,输出相信是信息。但是发现指定c参数后,run参数无法生效!在这种情况下,实在是没有什么好的办法来应对这种情况。当gotest运行超过10m时,option-timeout默认为panic。如果需要运行更长时间,则需要明确指定。将超时指定为0以忽略时间限制。nohupgotest-v-timeout0-runTestGetRange.>log.txt使用map的测试可以结合闭包来设置期望和编写测试用例。Run函数在内部被阻止,因此TestSum方法按顺序执行测试。同时testSumFunc返回的特点是测试方法使用了闭包,返回函数内部的值无法确定。funcTestSum(t*testing.T){t.Run("A",testSumFunc([]int{1,2,3},7))t.Run("B",testSumFunc([]int{2,3,4},8))}funcSum(numbers[]int)int{total:=0for_,v:=rangenumbers{total+=v}returntotal}functestSumFunc(numbers[]int,expectedint)func(t*testing.T){returnfunc(t*testing.T){actual:=Sum(numbers)ifactual!=expected{t.Error(fmt.Sprintf("Expectedthesumof%vtobe%dbutinsteadgot%d!",numbers,expected,actual))}}}Main很简单,看下面的例子。这样,任何一个测试用例执行时,都先进行准备,测试用例执行完后,再进行清理。需要特别说明的是:flag.Parse()和os.Exit(m.Run())是必不可少的两个步骤。funcTestMain(m*testing.M){//准备工作fmt.Println("startprepare")flag.Parse()exitCode:=m.Run()//清理工作fmt.Println("preparetoclean")os.Exit(exitCode)}性能测试pprof定位服务是否存在资源泄露或者API滥用,光靠review代码是不行的,最好借助工具。Profile引用godocforpprof描述:Profile是堆栈跟踪的集合,显示导致特定事件实例的调用序列,例如分配。包可以创建和维护自己的配置文件;最常见的用途是跟踪必须明确关闭的资源,例如文件或网络连接。性能测试涉及以下几个方面:CPUProfiling:CPU分析,收集被监控应用程序CPU(包括寄存器)在一定频率下的使用情况,可以判断应用程序正在积极消耗CPU周期中的时间花费在何处MemoryProfiling:内存profiling,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,并检查内存泄漏mutex的竞争情况。在程序中引入如下包,即可通过web查看性能状态。访问路径为:/debug/pprof/,路径下显示了几个查看项。该路径下还有其他子页面。_"net/http/pprof"关于/debug/pprof/下的子页面:$HOST/debug/pprof/profile$HOST/debug/pprof/block$HOST/debug/pprof/goroutine$HOST/debug/pprof/heap$HOST/debug/pprof/mutex$HOST/debug/pprof/threadcreate在终端查看性能只要启动服务器,引入pprof包,就可以在终端获取profile文件。如下图:pprof-seconds=10http://192.168.77.77:3900/debug/pprof/profile拿到cpu.prof文件后,可以使用如下命令可视化运行结果。这是火焰图的另一种格式。也很帅:##可以在浏览器中通过localhost:1313在web端查看##pprof-http=:1313cpu.prof##或者直接在gotoolpprofcpu.prof$web|topBenchmark测试基本使用terminal:funcBenchmarkBadgeRelationMapper_GetCountByUid(b*testing.B){count:=0fori:=0;i
