Go基础<4>

45 阅读3分钟

前言:今天的内容就是实践与测试了

话不多说,切入主题:

go是一种开源的静态类型编程语言,具有简洁、高效、并发安全等特点,适用于构建可靠和高性能的软件应用。在Go中,测试是一项重要的实践,它有助于确保代码的正确性和可靠性。Go语言内置了一个轻量级的测试框架,称为"testing",可以用于编写和运行单元测试、性能测试和示例代码。

package main

import "testing"

// 要测试的函数
func Add(a, b int) int {
	return a + b
}

// 单元测试
func TestAdd(t *testing.T) {
	result := Add(2, 3)
	expected := 5
	if result != expected {
		t.Errorf("Add(2, 3) = %d; expected %d", result, expected)
	}
}

func main() {
	// 运行单元测试
	testing.Main(func(_, _ string) (bool, error) { return true, nil }, nil, nil, nil)
}

我们定义了一个名为Add的函数,用于计算两个整数的和。然后,我们编写了一个名为TestAdd的单元测试函数,对Add函数进行测试。在测试函数中,我们调用Add函数并检查结果是否与预期相符,如果不相符,则使用t.Errorf函数报告错误。最后,我们通过调用testing.Main函数来运行单元测试。 在命令行中执行go test命令,Go会自动识别并执行测试代码。测试框架会输出测试结果,并提供详细的错误信息和覆盖率报告。 运行截图:

image.png ps: 这里要记得,你的文件名必须以_test.go 结尾才会识别并且执行测试(go语言规定的)

比如说,作者就在这犯了这个错误,所以

image.png

既然说到这里了,那么就继续把这些总结下:

  1. 测试文件命名和组织:

    • 测试文件的命名应该与要测试的源代码文件相关,并以_test.go结尾。例如,对于example.go文件,相应的测试文件应命名为example_test.go
    • 在测试文件中,你可以创建一个或多个以Test开头的测试函数,这些函数将被测试框架自动识别和运行。
  2. 编写测试函数:

    • 测试函数的签名应为func TestXxx(*testing.T),其中Xxx是你要测试的函数名。
    • 使用t.Errort.Fatal方法来报告测试失败。t.Error用于标记测试失败但继续执行,而t.Fatal用于标记测试失败并停止执行。
    • 使用t.Logf方法来记录额外的日志信息,以帮助你理解测试的执行过程。
  3. 使用断言:

    • Go语言中常用的断言库是testing包提供的断言方法,如t.Errorft.Fatalft.Log等。这些方法可以帮助你编写更丰富和准确的测试断言。
    • 另外,还可以使用第三方的断言库,如github.com/stretchr/testify/assert。这些库提供了更丰富的断言函数,可以简化测试代码的编写。
  4. 表格驱动测试:

    • Go语言鼓励使用表格驱动测试的方式来组织测试用例。通过使用结构体切片或二维数组,你可以方便地组织多个输入和预期输出的测试数据,并使用循环来遍历执行测试。
  5. 运行测试:

    • 在项目根目录下,可以使用以下命令运行测试:

      go test
      
     -   运行测试时,测试框架会自动寻找并执行所有以`Test`开头的测试函数。
    
    • 你还可以使用go test -run <pattern>来运行特定的测试函数,其中<pattern>可以是部分或完整的测试函数名。
  6. 测试覆盖率:

  • Go测试工具还提供了测试覆盖率分析功能。你可以使用以下命令运行测试并生成测试覆盖率报告:
go test -cover

这将显示测试覆盖率的百分比,并高亮显示未被覆盖到的代码行。