Golang测试func TestXX(t *testing.T)的使用详解

 更新时间:2024年08月27日 11:35:11   作者:席万里  
一般Golang中的测试代码都以xxx_test.go的样式,在命名测试函数的时候以Testxx开头,下面给大家介绍Golang测试func TestXX(t *testing.T)的使用,感兴趣的朋友跟随小编一起看看吧

一般Golang中的测试代码都以xxx_test.go的样式,在命名测试函数的时候以Testxx开头。
以下是我写的一个单元:

package tests
import "strings"
func Split(s, sep string) (res []string) {
	i := strings.Index(s, sep)
	for i > -1 {
		res = append(res, s[:i])
		s = s[i+len(sep):]
		i = strings.Index(s, sep)
	}
	res = append(res, s)
	return
}

第一种测试方法:

func TestSplit(t *testing.T) {
	inputs := Split("a:b:c", ":")
	want := []string{"a", "b", "c"}
	if !reflect.DeepEqual(inputs, want) {
		t.Errorf("inputs:%v, want:%v", inputs, want)
	}
}

这种直接定义好输入、期望值,进行对比,这种不适合大量数据比较。

第二种测试方法:

func TestSplit(t *testing.T) {
	testCases := []struct {
		input string
		sep   string
		want  []string
	}{
		{input: "a:b:c", sep: ":", want: []string{"a", "b", "c"}},
		{input: "a:b:c", sep: ",", want: []string{"a:b:c"}},
		{input: "abcd", sep: "bc", want: []string{"a", "d"}},
	}
	for _, tc := range testCases {
		got := Split(tc.input, tc.sep)
		if !reflect.DeepEqual(got, tc.want) {
			t.Errorf("期望值:%v,实际值:%v\n", tc.want, got)
		}
	}
}

使用结构体测试,然后使用for range遍历,是比较方便的方式,但是如果我的测试数据很多,但是我其中一个测试出现错误了,我现在需要找到那一个,那么这个方式就有点不适用了。

第三种测试方法(推荐使用):

func TestSplit(t *testing.T) {
	testCases := map[string]struct {
		input string
		sep   string
		want  []string
	}{
		"one":   {input: "a:b:c", sep: ":", want: []string{"a", "b", "c"}},
		"two":   {input: "a:b:c", sep: ":", want: []string{"a", "b", "c"}},
		"three": {input: "a:b:c", sep: ":", want: []string{"a", "b", "c"}},
		"four":  {input: "a:b:c", sep: ":", want: []string{"a", "b", "c"}},
		"five":  {input: "a:b:c", sep: ":", want: []string{"b", "b", "c"}},
	}
	for name, tc := range testCases {
		t.Run(name, func(t *testing.T) {
			got := Split(tc.input, tc.sep)
			if !reflect.DeepEqual(got, tc.want) {
				t.Errorf("期望值:%v,实际值:%v", tc.want, got)
			}
		})
	}
}

这里我们使用子测试的方法,主要可以看到第五个测试案例直接报错,信息并显示出来。

同样,也有一些其他的测试方法,后续如果了解更多的话,在这里补上。

到此这篇关于Golang测试func TestXX(t *testing.T)的使用的文章就介绍到这了,更多相关Golang测试func TestXX使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言中sync.Mutex的使用方法

    Go语言中sync.Mutex的使用方法

    本文主要介绍了golang中sync.Mutex的实现方法,mutex主要有两个 method:Lock()和Unlock(),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 详解Golang中创建error的方式总结与应用场景

    详解Golang中创建error的方式总结与应用场景

    Golang中创建error的方式包括errors.New、fmt.Errorf、自定义实现了error接口的类型等,本文主要为大家介绍了这些方式的具体应用场景,需要的可以参考一下
    2023-07-07
  • 通过示例深度理解Go channel range

    通过示例深度理解Go channel range

    这篇文章主要为大家介绍了Go channel range使用示例深度理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Go语言sync.Cond使用方法详解

    Go语言sync.Cond使用方法详解

    Go语言标准库中还包含条件变量 sync.Cond,它可以让一组 Goroutine 都在满足特定条件时被唤醒,每一个sync.Cond结构体在初始化时都需要传入一个互斥锁,接下来我们将通过文中例子了解它的使用方法,感兴趣的同学跟着小编一起来看看吧
    2023-07-07
  • Golang 依赖注入经典解决方案uber/fx理论解析

    Golang 依赖注入经典解决方案uber/fx理论解析

    这篇文章主要为大家介绍了Golang依赖注入经典解决方案uber/fx理论解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Go语言struct要使用 tags的原因解析

    Go语言struct要使用 tags的原因解析

    这篇文章主要介绍了为什么 Go 语言 struct 要使用 tags,在本文中,我们将探讨为什么 Go 语言中需要使用 struct tags,以及 struct tags 的使用场景和优势,需要的朋友可以参考下
    2023-03-03
  • Golang gRPC HTTP协议转换示例

    Golang gRPC HTTP协议转换示例

    这篇文章主要为大家介绍了Golang gRPC HTTP协议转换示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Golang内存泄漏场景以及解决方案详析

    Golang内存泄漏场景以及解决方案详析

    golang中内存泄露的发现与排查一直是来是go开发者头疼的一件事,下面这篇文章主要给大家介绍了关于Golang内存泄漏场景以及解决的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Golang实现可重入锁的示例代码

    Golang实现可重入锁的示例代码

    可重入锁指的是同一个线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码,在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。本文将用Golang实现可重入锁,需要的可以参考一下
    2022-05-05
  • Golang Redis连接池实现原理及示例探究

    Golang Redis连接池实现原理及示例探究

    这篇文章主要为大家介绍了Golang Redis连接池实现示例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01

最新评论