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
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