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

  • 相关阅读:
    03、Jenkins相关概念
    02、Jenkins安装部署
    01、Jenkins简介
    10.ansible 利用playbook部署LAMP环境
    09.ansilbe利用playbook部署LNMP环境
    08.编译安装httpd
    python入门到放弃(五)-基本数据类型之list列表
    python入门到放弃(四)-基本数据类型之str字符串
    python入门到放弃(三)-基本数据类型之int整数和bool值
    CentOS7.5源码编译安装mysql5.7.29
  • 原文地址:https://www.cnblogs.com/rsapaper/p/15078193.html
Copyright © 2011-2022 走看看