03. Test的写法

package main

import (
    "testing"
)

func TestPrint(t *testing.T) {
    res := Print1to20()
    if res != 210 {
        t.Errorf("Wrong result of Print1to20")
    }
}
  • 每一个test文件须import一个testing
  • test文件下的每一个test case均必须以Test开头并且符合TestXXX形式, 否则go test会直接跳过测试不执行
  • test case的入参为t *testing.T 或b *testing.B
  • t.Errorf为打印错误信息,并且当前test case 会被跳过
  • t.SkipNow()为跳过当前test,并且直接按PASS处理继续下一个test
  • Go的test不会保证多个TestXXX是顺序执行, 但是通常会按照顺序执行
    • 使用t.Run来执行subtests可以做到控制test输出以及test的顺序
  • 使用TestMain作为初始化test, 并且使用m.Run()来调用其他tests可以完成一些需要初始化操作的testing,比如数据库连接, 文件打开,REST服务登录等
  • 如果没有在TestMain中调用m.Run()则除了TestMain以外的其他tests都不会被执行
package main

import (
    "fmt"
    "testing"
)

func testPrint(t *testing.T) {
    // 暂时跳过当前测试
    // t.SkipNow()
    res := Print1to20()
    // testPrint(t)
    fmt.Println("hey")
    if res != 210 {
        t.Errorf("Wrong result of Print1to20")
    }
}

func testPrint2(t *testing.T) {
    res := Print1to20()
    res++
    if res != 211 {
        t.Errorf("Test Print2 Failed")
    }
}

func TestAll(t *testing.T) {
    // 按顺序执行test
    t.Run("test1", testPrint)
    t.Run("test2", testPrint2)
}

func TestMain(m *testing.M) {
    fmt.Println("Tests begins...")
    // 注意: 如果不调用Run(), 其他test用例都不会执行!
    // m.Run()
}

// 测试中间步骤
// func testPrint(t *testing.T) {
//  fmt.Println("test中间步骤")
// }

你可能感兴趣的:(03. Test的写法)