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

  • 相关阅读:
    4.VS2010C++建立DLL工程
    C++-教程2-VS2010C++相关文件说明
    C++-教程1-VS2010环境设置
    Android实例-实现扫描二维码并生成二维码(XE8+小米5)
    C++-教程3-VS2010C++各种后缀说明
    Android问题-No resource found that matches the given name (at 'theme' with value '@style/CaptureTheme').
    Android问题-新电脑新系统WIN764位上安装简版本的XE8提示“Unit not found: 'System'”
    启动程序的同时传参给接收程序(XE8+WIN764)
    Android实例-程序切换到后台及从后台切换到前台
    Unity向量投影使用
  • 原文地址:https://www.cnblogs.com/rsapaper/p/15078193.html
Copyright © 2011-2022 走看看