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

  • 相关阅读:
    mac c++编译出现segmentation fault :11错误
    ssh 连接缓慢解决方法
    237. Delete Node in a Linked List
    203. Remove Linked List Elements
    Inversion of Control Containers and the Dependency Injection pattern
    82. Remove Duplicates from Sorted List II
    83. Remove Duplicates from Sorted List
    SxsTrace
    使用CCleaner卸载chrome
    decimal and double ToString problem
  • 原文地址:https://www.cnblogs.com/rsapaper/p/15078193.html
Copyright © 2011-2022 走看看