golang testing 测试方法

go语言是一门快速、安全、简单的编程语言,同时也支持测试非常友好。在golang开发测试时,能够提高代码的质量和准确性,使得开发者在进行项目开发时能够更加轻松的迭代。

本文将会介绍Golang中的测试方法,包括单元测试、基准测试、性能测试以及边界测试。我们会分享常见的测试用例和测试技巧,帮助读者更好的了解Golang测试方法和技能,提高开发的效率和质量。

一、单元测试

1、测试用例基础框架

测试用例的基础框架是:

立即学习“go语言免费学习笔记(深入)”;

func TestFunctionName(t *testing.T) {    // testing function}

登录后复制

TestFunctionName是测试方法名,必须以Test开头,后面的FunctionName可以任意命名。testing.T是一个测试上下文,用来调度测试访问方法和记录测试的状态。在测试过程中可以利用它来报告失败和错误,将测试结果输出到控制台。

例如代码:

package mainimport "testing"func Sum(x int, y int) int {    return x + y}func TestSum(t *testing.T) {    got := Sum(1, 2)    want := 3    if got != want {        t.Errorf("Sum(1,2) = %d; want %d", got, want)    }}

登录后复制

当程序运行时,若输出结果和预期不一致,则会输出报错信息,例如:

--- FAIL: TestSum (0.00s)    main_test.go:11: Sum(1,2) = 4; want 3FAILexit status 1FAIL        command-line-arguments  0.005s

登录后复制

2、测试用例命名和组织

Golang的测试方法命名必须以Test为前缀,这样可以让测试框架自动识别它们,并在运行 go test 命令时执行它们。同时为了避免和其他同名测试方法冲突,测试方法的命名应保证唯一性。

为了更好的组织测试用例,可以在测试用例的前面添加一些可识别的标识,例如:

TestXxx、BenchmarkXxx、ExampleXxx 在浏览器中运行例子时运行相应的函数,以 Xxx 为函数名,Xxx 前面的部分不能是 Test、Benchmark、Example、Output、Input 或者 Error,并且第一个字母不能是小写字母 [a-z]TestXxxShort 在go test命令中只会运行该测试方法。例如:TestParseShort()TestXxxParallel 可以并行运行,可以使用t.Parallel()在测试中提高效率。例如:TestFooParallel()

3、测试用例的目标和实现

通过单元测试,可以对Golang代码进行质量和准确性的验证,包括:

函数是否返回预期结果是否符合运行时处理逻辑是否能够处理预期之外的情况

例如代码:

// Add 两个整数x和yfunc Add(x, y int) int {    return x + y}

登录后复制

对应的测试代码:

func TestAdd(t *testing.T) {    cases := []struct {        in1, in2, want int    }{        {1, 2, 3},        {0, 0, 0},        {-1, 1, 0},    }    for _, c := range cases {        got := Add(c.in1, c.in2)        if got != c.want {            t.Errorf("Add(%d, %d) == %d, want %d", c.in1, c.in2, got, c.want)        }    }}

登录后复制

Go的测试框架允许我们创建带有控制结构的测试用例,例如循环、分支和异常错误处理。在测试代码中,通过将输入参数传递给函数并比较函数输出值和预期值,然后验证代码是否按照设计预期运行。

二、基准测试

Golang基准测试用于比较代码在不同情况下的性能差异。基准测试会多次运行代码,并比较运行时间。如果有速度差异,则可以确定哪些实现方式会更快。

基准测试的基本框架是:

func BenchmarkFunctionName(b *testing.B) {    // Testing code}

登录后复制

其中,BenchmarkFunctionName表示基准测试方法名,必须以Benchmark开头,后面的FunctionName可任意命名。testing.B则是测试上下文,用来控制测试的状态和迭代。在基准测试过程中,可以利用它来控制测试运行次数、检测检测停止时可能出现的错误等问题。

例如代码:

func BenchmarkAdd(b *testing.B) {    for i := 0; i 

当程序运行时,输出结果如下:

BenchmarkAdd-4        2000000000             0.29 ns/opPASSok      _/Users/test/main    1.028s

登录后复制

其中,

“BenchmarkAdd” 表示基准测试的名称“4” 表示测试函数并行执行的goroutine数目“2000000000” 表示testing.B.Run执行的总的迭代次数,Go语言内部自适应均衡每次迭代的次数“0.29 ns/op” 表示平均每次迭代所需要的时间为 0.29 纳秒。

三、性能测试

性能测试用于测试程序在长时间的运行过程中的表现。例如:

func TestPerfAdd(t *testing.T) {    for i := 0; i 

其中,测试循环运行函数100000次,来测试它在长时间运行时的性能问题。非常适合用于测试程序在内存泄漏、文件句柄泄漏或其他资源泄漏方面表现的好坏。

四、边界测试

边界测试用于测试代码处理边界条件的情况,例如:

func TestBubbleSort(t *testing.T) {    tests := []struct {        name string        in   []int        want []int    }{        {"Sorted", []int{1, 2, 3, 4, 5}, []int{1, 2, 3, 4, 5}},        {"Reverse", []int{5, 4, 3, 2, 1}, []int{1, 2, 3, 4, 5}},        {"FewElement", []int{5, 3}, []int{3, 5}},        {"Duplicate", []int{5, 3, 5, 2, 2}, []int{2, 2, 3, 5, 5}},    }    for _, tt := range tests {        t.Run(tt.name, func(t *testing.T) {            BubbleSort(tt.in)            if !reflect.DeepEqual(tt.in, tt.want) {                t.Errorf("test case %s expects %v but actual is %v",                    tt.name, tt.want, tt.in)            }        })    }}

登录后复制

边界测试可以检查程序在处理边缘条件时是否符合预期,例如:

处理一些不正常的输入(例如负数、0、极大/小值)让程序处于最快或最慢的处理情况下(例如数据大小为0或最大值)为函数的各种参数设置上下限并测试函数的反应

总结

在测试Golang的代码时,应考虑测试用例的多样性,从而能够为程序的各个部分提供有用的、全面的测试。Golang测试框架支持单元测试、基准测试、性能测试和边界测试,我们可以根据实际需要进行选择。不仅如此,我们还需要遵循一些测试最佳实践,例如规范测试方法命名、合理分配测试任务、提取重复的测试逻辑并使测试更容易快速运行。相信掌握了这些测试技能后,读者在进行Golang开发时能够更加深入地进行代码测试,提高开发的测试效率和代码质量。

以上就是golang testing 测试方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2395275.html

(0)
上一篇 2025年3月2日 12:57:05
下一篇 2025年2月27日 10:00:02

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • golang是什么公司

    golang并不是一个公司,而是一种编程语言,也被称为go语言。它由google公司开发,于2009年首次发布。 Go语言是一种高性能、可靠性强的编程语言,具有静态类型、内存安全和垃圾回收等特点。在编程语言的设计和实现上,Go语言被广泛认为…

    编程技术 2025年3月2日
    200
  • golang 捕获全局错误

    golang是一种现代化的编程语言,它被设计成一种高效的解决方案,能够让程序员轻松地管理和编写大规模的程序。golang擅长并发编程,在一些高可用性的应用程序中被广泛地使用。但是,在开发任何应用程序时,我们都必须时刻注意错误的处理,因为不处…

    编程技术 2025年3月2日
    200
  • golang sql 驱动安装

    在使用go语言进行数据库开发时,需要通过安装相应的sql驱动来连接数据库,这里介绍一下如何安装golang的sql驱动。 安装Go 如果你已经安装了Go语言环境,请跳过此步骤。如果没有,可以在Go的官方网站上下载最新版本的Go,并进行安装。…

    编程技术 2025年3月2日
    200
  • golang怎么打开项目

    在golang中打开项目并不像其他编程语言那样简单直接,需要遵循一定的规范和注意事项。下面,我将详细介绍如何在golang中打开项目。 1、设置GOPATH 在打开golang项目之前,先要设置GOPATH环境变量。GOPATH是golan…

    编程技术 2025年3月2日
    200
  • golang修改内存属性

    golang是一门快速发展的编程语言,它的强大和高效性使得它成为了越来越多开发者的选择。golang的内存管理机制也是其优秀性能的重要组成部分之一,它采用了基于垃圾回收机制的自动内存管理机制,可以使得程序员在编写代码时免去了手动分配和释放内…

    编程技术 2025年3月2日
    200
  • golang 不能在左边

    起飞 Golang是一门高效、简洁、易于学习和使用的编程语言。它源于一个Google的内部项目,旨在提高现有语言的生产力和编译速度。自2009年Golang首次发布以来,它已经成为Web和云应用程序开发中最受欢迎的语言之一。 然而,在所有G…

    编程技术 2025年3月2日
    200
  • golang命名怎么写

    在golang中,命名规则是非常重要的,因为它们直接影响代码的读写和可维护性。因此,在golang中编写良好的命名很重要,它可以使代码更加易于阅读、理解和维护。本文将介绍golang中命名的规则和最佳实践。 函数、变量和常量命名 在Gola…

    编程技术 2025年3月2日
    200
  • golang关闭其他程序

    最近在学习golang,遇到了一个需求:在程序运行过程中,需要关闭系统中指定的其他程序,以确保程序运行的正确性。为了实现该需求,我进行了一番研究,并给出了以下一些方法。 方法一:exec.Command golang中有exec包,通过该包…

    编程技术 2025年3月2日
    200
  • golang 流程审批框架

    随着企业的日益发展,流程审批已经成为了管理流程中极为必要的一部分,而随着技术的进步,各类流程审批框架也层出不穷,其中就包括 golang 流程审批框架。作为目前最为热门的编程语言之一,golang 以其高性能和并发性而备受赞誉,已广泛应用于…

    编程技术 2025年3月2日
    200
  • golang请求参数格式

    在golang中,我们经常需要使用http协议进行数据交互。在http请求中,请求参数是非常常见的,因此正确的请求参数格式对于后端开发人员来说是非常重要的。 那么,Golang中的请求参数格式有哪些呢?下面将通过代码示例来详细介绍。 表单形…

    编程技术 2025年3月2日
    200

发表回复

登录后才能评论