Golang开发:编写测试用例

在Go语言中,编写测试用例是一种很好的实践,用于确保代码的正确性和可维护性。Go提供了一个内建的testing包,它提供了编写和运行测试用例的基础功能。

以下是一个简单的Go测试用例的示例:

package example // 这里应该是你的包名

import (
	"testing"
)

// 假设你有一个要测试的函数
func Add(a, b int) int {
	return a + b
}

// 测试用例使用"Test"前缀,后跟一个描述性的名称
// 并且接收一个*testing.T类型的参数
func TestAdd(t *testing.T) {
	// 调用要测试的函数
	result := Add(1, 2)

	// 使用t.Errorf来报告错误(如果有的话)
	// 在这里,我们检查结果是否等于我们期望的值
	if result != 3 {
		t.Errorf("Add(1, 2) = %d; want 3", result)
	}
}

// 你可以编写多个测试用例
func TestAddNegative(t *testing.T) {
	result := Add(-1, -2)
	if result != -3 {
		t.Errorf("Add(-1, -2) = %d; want -3", result)
	}
}

// 运行测试用例
// 在命令行中,你可以使用以下命令来运行测试:
// go test

当你运行go test命令时,Go会查找当前包中所有以Test开头且接收一个*testing.T参数的函数,并将它们作为测试用例运行。每个测试用例都会在一个新的goroutine中执行,因此它们是并发的。

如果测试用例中的任何t.Errorf被调用,那么该测试用例将失败,并且错误消息将被打印出来。你可以使用t.Log来记录测试用例中的信息,这些信息在测试用例成功时也会被打印出来,但在失败时不会阻止测试用例的执行。

你还可以在测试用例中使用其他testing.T的方法来控制测试用例的执行流程,例如t.Skipt.FailNow

此外,你还可以编写基准测试(benchmark tests),它们以Benchmark为前缀,并接收一个*testing.B类型的参数。基准测试用于测量代码的性能,并给出每次操作的大致执行时间。

测试用例文件位置:

确保测试文件位于与你的包相对应的目录中。例如,如果你的包名是mathapi,那么测试文件应该位于mathapi目录下或者其子目录下。

mathapi/  
    main.go  
    subpkg/  
        subpkg.go  
        subpkg_test.go

你可以运行go test ./…来测试所有子包。

测试命令

您的解释和命令都是正确的,这些命令分别用于在Go中执行测试用例。下面是对您提供的命令的一些详细说明和关于如何指定特定测试用例的补充:

  1. 执行当前目录下的全部测试用例,不递归子目录中的测试用例
go test .

这个命令会执行当前目录下所有名为*_test.go的测试文件,但不会递归到子目录中查找和执行测试用例。

  1. 执行当前目录下的全部测试用例,递归子目录中的测试用例
go test ./...

使用./...作为参数会告诉go test递归地查找并执行当前目录及其所有子目录中的测试用例。

  1. 执行当前目录下的全部测试用例并显示测试过程中的日志内容,不递归子目录中的测试用例
go test -v .

-v(或--verbose)标志告诉go test在测试执行过程中输出额外的日志信息,如每个测试用例的开始和结束、测试结果的输出等。

  1. 执行当前目录下的全部测试用例并显示测试过程中的日志内容,递归子目录中的测试用例
go test -v ./...

与上面类似,但这次会递归地查找并执行测试用例。

  1. 执行指定的测试用例

要执行特定的测试用例,您可以使用-run标志,并传递一个正则表达式来匹配您想要运行的测试用例名称。测试用例名称是Test后跟一个或多个大写字母、数字和下划线的组合。

go test -v . -run TestValid

上面的命令会执行名称以TestValid开头的所有测试用例。请注意,不需要在正则表达式前后加^$,除非您确切地只想匹配这个特定的名字(没有其他字符)。

如果您确实只想匹配名为TestValid的测试用例(没有其他字符),则可以使用以下命令:

go test -v . -run ^TestValid$

但通常,只要测试用例名称以您提供的字符串开头,它就会被执行,所以简单的TestValid通常就足够了。

请注意,在使用-run参数时,go test仍然会编译和运行所有测试文件,但只会执行与给定正则表达式匹配的测试用例。如果测试文件或测试用例的编译失败,整个go test命令将失败,即使与正则表达式匹配的测试用例可能成功。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ArslanRobot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值