Golang testing包的使用

Golang testing包的使用

golang自带了testing测试包,使用该包可以进行自动化的单元测试,输出结果验证,并且可以测试性能。

测试文件及目录

使用testing测试包的测试文件名称需要以_test.go结尾,并且该测试文件需要与待测试的文件置于同一目录下。比如如下目录:

目录

这里需要测试的是service目录中各个文件中的函数,则在该目录中创建一个名为service_test.go的文件,即可在该文件中调用其他文件的函数进行测试。

测试函数

_test.go中通过编写测试函数来进行测试。

首先引入testing包

import testing

对于测试函数,其命名需要以“Test”开头,并且其后的字符串的第一个字符必须是大写,或者是数字。如果没有按照此规则进行命名,则该函数在测试时不会被执行。

其次,测试函数的参数必须为(t *testing.T),该参数包含有LogError等方法,用于输出测试结果,其中Log用于测试通过的情况,Error则用于测试出错的情况。

比如如下测试函数:

func TestUserLogin_normal(t *testing.T) {
	err := User().Login("test1", "321")
	if err == nil {
		t.Log("Login test1 success")
	} else {
		t.Error(err)
	}
}

该函数负责测试User().Login()方法的功能,当其功能正常执行时返回nil,则调用t.Log()输出测试通过的信息,否则测试不通过,调用t.Error()输出错误信息。

执行测试

在测试文件的目录下使用命令go test即可进行测试。

假如当前的测试文件中有以下函数:

func TestUserRegister_normal(t *testing.T){.....}
func TestUserRegister_IllegalName(t *testing.T){.....}
func TestUserRegister_DuplicateName(t *testing.T){.....}
func TestUserLogin_normal(t *testing.T){.....}
func TestUserLogin_NullUser(t *testing.T){.....}

当直接执行go test时,会默认执行所有"Test"开头的函数,并且执行的顺序与函数定义的顺序相同。

如果需要指定某个函数进行测试,可以在命令后加上-run参数,该参数用于匹配要执行的测试函数的函数名(通过正则表达式来匹配)

比如要单独执行TestUserRegister_normal测试函数时,用以下命令:

go test -run=TestUserRegister_normal

当要执行所有名称前缀为TestUserRegister的测试函数时,用以下命令:

go test -run=TestUserRegister

在Goland开发工具中进行go test测试则更为快捷,比如可以直接指定执行某个测试函数:

test1

如图,只要点击左侧的运行按钮即可执行该测试。此外也可以直接点击右上角的运行按钮来执行某个测试文件中的所有测试:

test4

但首先要指定待测试的目录,在运行按钮左侧的下拉列表中选择"Edit Configurations",即可进行设置,比如要测试service目录,则将“Directory"设为相应路径,再选择”gotest“

test3

执行test命令后,相应的测试函数会按顺序执行一次,如果某个测试函数调用了t.Error(),则测试不通过,可以看到输出中显示“Failed”, 否则显示“Pass”,并且会显示通过的测试数量以及相应的输出信息:

test2