golang开发神器盘点:单元测试、benchmark、pprof、dlv

2023年 7月 11日 41.2k 0

Java中,我们用Junit做单元测试,用JMH做性能基准测试(benchmark),用async-profiler剖析cpu性能,用jstack、jmap、arthas等来排查问题。

作为一名比较新的编程语言,golang的这些工具是否更加好用呢?

单元测试

Java的单元测试需要使用第三方库,一般是Junit,配置起来比较复杂。在使用了golang之后发现golang自带的单元测试真的非常简单。

如果我们有一个cal.go文件,那么其对应的单元测试文件为cal_test.go,其中的方法命名必须为TestXxx,这种按照命名进行单元测试的方式简单有效,也正是通常所说的“约定大于配置”。

来看一个简单的例子:

package unit


func add(a int, b int) int {
   return a + b
}


func sub(a int, b int) int {
   return a - b
}
package unit


import (
    "github.com/stretchr/testify/assert"
    "testing"
)


func TestAdd(t *testing.T) {
    assert.Equal(t, 10, add(5, 5))
}


func TestSub(t *testing.T) {
    assert.Equal(t, 0, sub(5, 5))
}

执行单元测试只需要运行(更多用法参考go help test)

go test --cover cal_test.go cal.go -v

golang开发神器盘点:单元测试、benchmark、pprof、dlv

benchmark

和单元测试类似,golang的benchmark也是开箱即用。在cal_test.go基础上增加一个BenchmarkAdd方法

package unit

import (
   "github.com/stretchr/testify/assert"
   "testing"
)

func TestAdd(t *testing.T) {
   assert.Equal(t, 10, add(5, 5))
}

func TestSub(t *testing.T) {
   assert.Equal(t, 0, sub(5, 5))
}

func BenchmarkAdd(b *testing.B) {
   for i:= 0; i 

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论