Q1mi / BlogComments

9 stars 0 forks source link

Go语言基础之测试 | 李文周的博客 #13

Open Q1mi opened 5 years ago

Q1mi commented 5 years ago

https://www.liwenzhou.com/posts/Go/16_test/

李文周的Blog Go语言测试 单元测试 go test

miniyk2012 commented 4 years ago

palindrome.go

import "strings"

func judgePalindrome(s string) bool {
    runeS := []rune(strings.ToUpper(s))
    start, end := 0, len(runeS)-1
    for end > start {
        if runeS[start] != runeS[end] {
            return false
        }
        end--
        start++
    }
    return true
}

palindrome_test.go

package homework

import (
    "testing"
)

func TestJudgePalindrome(t *testing.T) {
    tests := [][]interface{}{
        {"中文回文", "杨恺是恺杨", true},
        {"中文非回文", "杨恺是杨恺", false},
        {"英文非回文", "are you ok?", false},
        {"英文回文", "MadamImAdam", true},
        {"空", "", true},
    }
    for _, line := range tests {
        t.Run(line[0].(string), func(t *testing.T) {
            s := line[1].(string)
            want := line[2].(bool)
            got := judgePalindrome(s)
            if got != want {
                t.Errorf("want %t, got %t\n", want, got)
            }
        })
    }
}
ganganlee commented 4 years ago
func Huiwen(str string) bool{
    //1 先将字符串转为小写
    str = strings.ToLower(str)

    //2 将字符串拆分成为数组
    sli := strings.Split(str,"")

    //3 获取切片长度
    len := len(sli)

    //循环数组,比较值是否相等
    for i:= 0; i < (len / 2);i++{
        if sli[i] != sli[len-i-1] {
            return false
        }
    }
    return true
}
liuzhidon9 commented 4 years ago
// Palindrome 回文检测函数
func Palindrome(s string) bool {
    ab := strings.Split(s, "")
    for i, v := range ab {
        if v != ab[len(ab)-i-1] {
            return false
        }
    }
    return true
}
jueyingbingfeng commented 3 years ago

func Huiwen(a string) bool {
    var str string
    //正则匹配字符
    r1 := regexp.MustCompile("[^‘’,']+")
    strSlic := r1.FindAllString(a, -1)

    for _, val := range strSlic {
        str = str + val
    }
        //字符串转为utf8编码切片
    strslice := []rune(strings.ToLower(str))
    n := len(strslice)
    //循环遍历对比
    for i := 0; i < n/2; i++ {
        if strslice[i] != strslice[n-i-1] {
            return false
        }
    }
    return true
}
carrymec commented 3 years ago

提供一种通过mock方式的单元测试用例: //solution.go type Solution interface { JudgePalindrome(s string) bool }

type App struct { S Solution }

func (a *App) judgePalindrome(s string) bool { runeS := []rune(strings.ToUpper(s)) start, end := 0, len(runeS)-1 for end > start { if runeS[start] != runeS[end] { return false } end-- start++ } return true } //go:generate mockgen -destination ../mocks/mock_solution.go -package mock -source solution.go

func TestApp_judgePalindrome(t *testing.T) { tests := []struct { name string str string want bool }{ { name: "test ok", str: "abba", want: true, }, { name: "test fail", str: "abc", want: false, },

    {
        name: "中文回文",
        str:  "你好好你",
        want: true,
    },
    {
        name: "中文非回文",
        str:  "思考思考是",
        want: false,
    },
    {
        name: "empty",
        want: true,
        str:  "",
    },
}
for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        ctrl := gomock.NewController(t)
        defer ctrl.Finish()
        mockSolution := mock.NewMockSolution(ctrl)
        mockSolution.EXPECT().JudgePalindrome(tt.str).AnyTimes().Return(tt.want)
        app := App{S: mockSolution}
        if got := app.judgePalindrome(tt.str); got != tt.want {
            t.Errorf("judgePalindrome() = %v, want %v", got, tt.want)
        }
    })
}

}

fidelyiu commented 3 years ago

性能比较测试中,遍历b.N的作用是什么?