6.5. 一个带测试的演示包

这个演示用的包numbers含有一个函数Double,其参数为一个整数,返回值则是将该整数乘以2。这个包由三个文件组成:

第一个,包的实现,numbers.go:

  package numbers

  func Double(i int) int {
      return i * 2
  }

接下来是测试,numbers_test.go:

  package numbers

  import (
      "testing"
  )

  type doubleTest struct {
      in, out int
  }

  var doubleTests = []doubleTest{
      doubleTest{1, 2},
      doubleTest{2, 4},
      doubleTest{-5, -10},
  }

  func TestDouble(t *testing.T) {
      for _, dt := range doubleTests {
          v := Double(dt.in)
          if v != dt.out {
              t.Errorf("Double(%d) = %d, want %d.", dt.in, v, dt.out)
          }
      }
  }

最后是Makefile:

  include $(GOROOT)/src/Make.inc
  TARG=numbers
  GOFILES=      numbers.go  include $(GOROOT)/src/Make.pkg

运行gomake构建并将这个包安装到$GOROOT/pkg/(可供系统上的所有程序使用)。

执行gotest测试会重建这个包,包括numbers_test.go文件,然后运行TextDouble函数。输出“PASS”表示所有测试都成功通过。把实现中的乘数从2改成3就能看到测试失败的报告。

更多细节请参考gotest文档和testing包的文档。