go中的测试

85 阅读1分钟

1、测试的一些语法规则

  • 文件必须以_test.go结尾
  • 函数名以Test开头
  • 应该用表格测试的方法
func TestTwoSum(t *testing.T) {
   var data = []struct {
      nums, result []int
      target       int
   }{
      {[]int{2, 7, 11, 15}, []int{0, 1}, 9},
      {[]int{3, 2, 4}, []int{1, 2}, 6},
      {[]int{3, 3}, []int{0, 1}, 6},
   }

   for _, tt := range data {
      actual := twoSum(tt.nums, tt.target)

      if len(actual) != len(tt.result) {
         t.Errorf("expected %v ,actual get %v\n", tt.result, actual)
      }

      for i := 0; i < len(actual); i++ {
         if actual[i] != tt.result[i] {
            t.Errorf("expected %v ,actual get %v\n", tt.result, actual)
         }
      }
   }
}

2、性能测试

  • 函数名称以Benchmark开头
func BenchmarkTwoSum(b *testing.B) {
   result := []int{8, 15}
   b.ResetTimer()

   for i := 0; i < b.N; i++ {
      actual := twoSum([]int{3, 3, 9, 11, 23, 45, 12, 67, 98, 1, 2, 3, 5, 4, 6, 100, 78}, 198)
      if len(actual) != len(result) {
         b.Errorf("expected %v ,actual get %v\n", result, actual)
      }
      for i := 0; i < len(actual); i++ {
         if actual[i] != result[i] {
            b.Errorf("expected %v ,actual get %v\n", result, actual)
         }
      }
   }
}

func twoSum(nums []int, target int) []int {
   for i := range nums {
      another := target - nums[i]
      for j := i + 1; j < len(nums); j++ {
         if nums[j] == another {
            return []int{i, j}
         }
      }
   }
   return []int{}
}

3、可视化性能测试

  • 进入到相应目录下面执行 go test -bench . -cpuprofile cpu.out
  • 使用这个工具查看cpu.out go tool pprof cpu.out
  • 然后输入 web

image.png

image.png