zoukankan      html  css  js  c++  java
  • Golang单元测试实战

    vscode 工具生成测试文件、测试代码

    package main
    
    import (
    	"os"
    	"strings"
    )
    
    func ExtractDir(isDIr bool, p string) string {
    	if isDIr {
    		return p
    	}
    	ps := "/"
    	l := strings.Split(p, ps)
    	n := len(l) - 1
    	p = strings.Join(l[0:n], ps)
    	return p
    }
    
    func CreateDirIfIsNotExist(isDIr bool, p string, perm os.FileMode) error {
    	// isDIr 由调用者声明是从文件或者目录,来创建目录(由具体的业务场景判断,因为无法从字符串判断)。
    	d := ExtractDir(isDIr, p)
    	_, err := os.Open(p)
    	if os.IsNotExist(err) {
    		// 注意路径穿越检查
    		// secguide/Go安全指南.md at main · Tencent/secguide · GitHub https://github.com/Tencent/secguide/blob/main/Go%E5%AE%89%E5%85%A8%E6%8C%87%E5%8D%97.md#121%E5%BF%85%E9%A1%BB-%E8%B7%AF%E5%BE%84%E7%A9%BF%E8%B6%8A%E6%A3%80%E6%9F%A5
    		err := os.MkdirAll(d, os.ModeDir)
    		return err
    	}
    	return nil
    }
    
    func NewFile(name string, data []byte, perm os.FileMode) error {
    	err := os.WriteFile(name, data, perm)
    	return err
    }
    

     

    package main
    
    import (
    	"os"
    	"testing"
    )
    
    func TestCreateDirIfIsNotExist(t *testing.T) {
    	type args struct {
    		isDIr bool
    		p     string
    		perm  os.FileMode
    	}
    	tests := []struct {
    		name    string
    		args    args
    		wantErr bool
    	}{
    		{name: "", args: args{isDIr: true, p: "test2/atxt", perm: 0777}},
    		{name: "", args: args{isDIr: true, p: "test3/t1/atxt", perm: 0777}},
    		{name: "", args: args{isDIr: true, p: "../../testa/t1/atxt", perm: 0777}},
    		{name: "", args: args{isDIr: true, p: "../../../testb/t1/atxt", perm: 0777}},
    		{name: "", args: args{isDIr: false, p: "atest2/a/b.txt", perm: 0777}},
    		{name: "", args: args{isDIr: false, p: "atest3/t1/a/b.txt", perm: 0777}},
    		{name: "", args: args{isDIr: false, p: "../../atest/t1/a/b.txt", perm: 0777}},
    		{name: "", args: args{isDIr: false, p: "../../../atest/t1/a/b.txt", perm: 0777}},
    	}
    	for _, tt := range tests {
    		t.Run(tt.name, func(t *testing.T) {
    			if err := CreateDirIfIsNotExist(tt.args.isDIr, tt.args.p, tt.args.perm); (err != nil) != tt.wantErr {
    				t.Errorf("CreateDirIfIsNotExist() error = %v, wantErr %v", err, tt.wantErr)
    			}
    		})
    	}
    }
    
    func TestNewFile(t *testing.T) {
    	type args struct {
    		name string
    		data []byte
    		perm os.FileMode
    	}
    	tests := []struct {
    		name    string
    		args    args
    		wantErr bool
    	}{
    		{name: "", args: args{name: "atest2/a/b.txt", data: []byte("1"), perm: 0777}},
    		{name: "", args: args{name: "atest3/t1/a/b.txt", data: []byte("1"), perm: 0777}},
    		{name: "", args: args{name: "../../atest/t1/a/b.txt", data: []byte("1"), perm: 0777}},
    		{name: "", args: args{name: "../../../atest/t1/a/b.txt", data: []byte("1"), perm: 0777}},
    	}
    	for _, tt := range tests {
    		t.Run(tt.name, func(t *testing.T) {
    			if err := NewFile(tt.args.name, tt.args.data, tt.args.perm); (err != nil) != tt.wantErr {
    				t.Errorf("NewFile() error = %v, wantErr %v", err, tt.wantErr)
    			}
    		})
    	}
    }
    

      

     

    一文说尽Golang单元测试实战的那些事儿

    一文说尽Golang单元测试实战的那些事儿 https://mp.weixin.qq.com/s/AuUd-S0g4QX_68CDO6jJWg

  • 相关阅读:
    【Codeforces 349B】Color the Fence
    【Codeforces 459D】Pashmak and Parmida's problem
    【Codeforces 467C】George and Job
    【Codeforces 161D】Distance in Tree
    【Codeforces 522A】Reposts
    【Codeforces 225C】Barcode
    【Codeforces 446A】DZY Loves Sequences
    【Codeforces 429B】Working out
    【Codeforces 478C】Table Decorations
    【Codeforces 478C】Table Decorations
  • 原文地址:https://www.cnblogs.com/rsapaper/p/15078193.html
Copyright © 2011-2022 走看看