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中间步骤")
// }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容