zoukankan      html  css  js  c++  java
  • go 学习笔记(2)go test

    Test 的写法:

    每一个test文件必须import 一个"testing"

    test文件下的每一个test case均必须以Test开头并且符合TestXxx形式,否则go test会直接跳过测试不执行

    eg: main_test.go

    package main
    
    import (
    	"fmt"
    	"testing"
    )
    
    func TestPrint(t *testing.T) {
    	res := Print1to20()
    	fmt.Println("hey")
    	if res != 210 {
    		t.Errorf("wrong result of Print1to20")
    	}
    }
    
    func TestPrint1(t *testing.T) {
    	fmt.Println("test")
    }
    

     main.go

    package main
    
    func Print1to20() int {
    	res := 0
    	for i := 0; i < 21; i++ {
    		res += i
    	}
    	return res
    }
    
    func main() {
    	Print1to20()
    }
    

      t.SkipNow()跳过当前case, 按PASS直接处理下一个case 

    Errorf打印错误信息时,整个test case会被跳过

     test case的入参为t *testing.T或者b *testing.B

    go 的test不会保证多个TestXxx是顺序执行,但是通常情况下会按照顺序执行

    使用t.Run来执行subtest可以做到控制test 输出以及test的顺序执行

    func TestPrint(t *testing.T){
        t.Run("a1",func(t *testing.T){fmt.PrintLn("a1")}),
        t.Run("a2",func(t *testing.T){fmt.PrintLn("a2")}),
    }
    

    TestMain: 初始化test,并且使用m.Run()来调用其他tests,可以完成一些需要初始化的testing, 如数据库连接,打开文件, REST服务登录等

    是test case 入口

    func TestMain(m *testing.M){
      //此处初始化操作
      fmt.PrintLn("test start")
    
      m.Run()
    
    }
    

      

      如果没有在TestMain函数中调用m.Run.则不会执行TestMain以外的tests

    package main
    
    import (
    	"fmt"
    	"testing"
    )
    
    func testPrint(t *testing.T) {
    	res := Print1to20()
    	fmt.Println("hey")
    	if res != 210 {
    		t.Errorf("wrong result of Print1to20")
    	}
    }
    
    func testPrint1(t *testing.T) {
    	res := Print1to20()
    	res++
    	if res != 211 {
    		t.Errorf("wrong result of Print1to20")
    	}
    }
    
    func TestAll(t *testing.T) {
    	t.Run("testPrint", testPrint)
    	t.Run("testPrint1", testPrint1)
    }
    

      

    package main
    
    import (
    	"fmt"
    	"testing"
    )
    
    func TestPrint(t *testing.T) {
    	res := Print1to20()
    	fmt.Println("hey")
    	if res != 210 {
    		t.Errorf("wrong result of Print1to20")
    	}
    }
    
    func TestPrint1(t *testing.T) {
    	res := Print1to20()
    	res++
    	if res != 211 {
    		t.Errorf("wrong result of Print1to20")
    	}
    }
    
    func TestMain(m *testing.M) {
    	fmt.Println("starting...")
    	m.Run()
    }
    

      

  • 相关阅读:
    fiddler的使用
    redis pipeline
    redis hash map
    redis队列的实现
    PHP-redis中文文档-命令
    websocket
    c++之socket,阻塞模式
    Django上传文件和修改date格式
    通过字符串导入模块
    'CSRFCheck' object has no attribute 'process_request' 报错
  • 原文地址:https://www.cnblogs.com/saryli/p/11344842.html
Copyright © 2011-2022 走看看