测试的具体例子

et08

package main

import (
    "fmt"
    "even/even"
)

func main() {
    for i:=0; i<=100; i++ {
        fmt.Printf("Is the integer %d even? %v\n", i, even.Even(i))
    }
}

  et09

package even

func Even(i int) bool {     // Exported function
    return i%2 == 0
}

func Odd(i int) bool {      // Exported function
    return i%2 != 0
}

  在 even 包的路径下,我们创建一个名为 et09_test 的测试程序:

package even

import "testing"

func TestEven(t *testing.T) {
    if !Even(10) {
        t.Log(" 10 must be even!")
        t.Fail()
    }
    if Even(7) {
        t.Log(" 7 is not even!")
        t.Fail()
    }

}

func TestOdd(t *testing.T) {
    if !Odd(11) {
        t.Log(" 11 must be odd!")
        t.Fail()
    }
    if Odd(10) {
        t.Log(" 10 is not odd!")
        t.Fail()
    }
}

  由于测试需要具体的输入用例且不可能测试到所有的用例(非常像一个无穷的数),所以我们必须对要使用的测试用例思考再三。

  至少应该包括:

  • 正常的用例
  • 反面的用例(错误的输入,如用负数或字母代替数字,没有输入等)
  • 边界检查用例(如果参数的取值范围是 0 到 1000,检查 0 和 1000 的情况)

  可以直接执行 go install 安装 even 或者创建一个 以下内容的 Makefile:

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

  然后执行 make(或 gomake)命令来构建归档文件 even.a

  测试代码不能在 GOFILES 参数中引用,因为我们不希望生成的程序中有测试代码。如果包含了测试代码,go test 会给出错误提示!go test 会生成一个单独的包含测试代码的 _test 程序。

  现在我们可以用命令:go test(或 make test)来测试 even 包。

  因为示例中的测试函数不会调用 t.Log 和 t.Fail,所以会得到一个 PASS 的结果。在这个简单例子中一切都正常执行。

  为了看到失败时的输出,把函数 TestEven 改为:

func TestEven(t *testing.T) {
    if Even(10) {
        t.Log(“Everything OK: 10 is even, just a test to see failed output!”)
        t.Fail()
    }
}

  现在会调用 t.Log 和 t.Fail,得到的结果如下:

--- FAIL: even.TestEven (0.00 seconds)
Everything OK: 10 is even, just a test to see failed output!
FAIL
posted @ 2022-02-05 19:33  Galaxies2580  阅读(65)  评论(0)    收藏  举报