美文网首页
03. Test的写法

03. Test的写法

作者: 大鱼人Echo | 来源:发表于2019-05-30 21:16 被阅读0次
    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的写法

          本文链接:https://www.haomeiwen.com/subject/gtnutctx.html