首页 > 其他分享 >go_test我使用

go_test我使用

时间:2024-07-20 16:18:12浏览次数:11  
标签:func testing test want 使用 go got string

go_test

一、Test

1. 使用介绍

  1. 测试函数以Test开头,只能有一个t *testing.T参数
  2. 输出:通过*testing.T 参数的断言函数检查。
  3. 执行:运行go test时自动运行

2. 用例

package main

import "testing"

func Hello() string {
    return "Hello, world"
}

func TestHello(t *testing.T) {
    got := Hello()
    want := "Hello, world"

    //使用go_test的时候会忽略fmt.printf
    if got != want {
        t.Errorf("got '%q' want '%q'", got, want)
    }
}

func TestHello2(t *testing.T) {

    assertCorrectMessage := func(t *testing.T, got, want string) {
        t.Helper()
        if got != want {
            t.Errorf("got '%q' want '%q'", got, want)
        }
    }

    t.Run("saying hello to people", func(t *testing.T) {
        got := Hello("Chris")
        want := "Hello, Chris"
        assertCorrectMessage(t, got, want)
    })

    t.Run("empty string defaults to 'world'", func(t *testing.T) {
        got := Hello("")
        want := "Hello, World"
        assertCorrectMessage(t, got, want)
    })

}

3.常见函数

t.Errorf()//如果有错误,则打印出来

t.Run(string,func)//启动一个子测试,测试的内容为func函数,为这个子测试取名为string

t.Helper()//告诉测试套件这个方法是辅助函数,当测试失败时所报告的行号将在函数调用中而不是在辅助函数内部。

二、示例函数

2.1. 使用介绍

  1. 示例函数以Example 开头
  2. 输出:通过 // Output: 注释检查标准输出。
  3. 执行:只有当包含 // Output: 注释时,在 go test 执行时才会运行。否之只会编译,不去运行

2.2. 用例


func Add(x, y int) int {
    return x + y
}

func ExampleAdd() {
    sum := Add(1, 5)
    fmt.Println(sum)
    // Output: 6
}

三、基准测试

3.1.介绍

基准测试(Benchmarking)在Go语言中是一种用于测量代码性能的测试方法。它通常用于评估代码的运行时间和资源消耗,帮助开发者找到性能瓶颈并优化代码。基准测试的函数以 Benchmark 开头,放在 _test.go 文件中,与普通的测试函数和示例函数放在一起。下面是详细介绍如何编写和运行基准测试。

  1. 基准测试必须以Benchmark开头,必须接受一个b *testing.B类型的参数
  2. 基准测试的核心是一个循环,执行要测试的代码 b.N
  3. 注意:b.N是自动调整的值,用于确保基准测试运行足够长的时间以提供可靠的测量结果

3.2.使用实例

package iteration

import "testing"

func Repeat(character string) string {
    var repeated string
    for i := 0; i < 5; i++ {
        repeated += character
    }
    return repeated
}

func BenchmarkRepeat(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Repeat("a")
    }
}

3.3.常见函数

b.StopTimer()//停止计时器
b.StartTimer()//启动计时器
b.ResetTimer() // 重置计时器,忽略初始化时间

3.4 运行结果实例

运行以下命令:

go test -bench ^BenchmarkRepeat$ ./for/v3

示例输出:

goos: windows
goarch: amd64
pkg: github.com/xvxing/learn-go-with-tests/for/v3
cpu: 13th Gen Intel(R) Core(TM) i9-13980HX
BenchmarkRepeat-32    	19619479	        59.18 ns/op	      16 B/op	       4 allocs/op
PASS
ok  	github.com/xvxing/learn-go-with-tests/for/v3	1.244s

标签:func,testing,test,want,使用,go,got,string
From: https://www.cnblogs.com/xvxing/p/18313292

相关文章

  • 【Python】使用库 -- 详解
    库就是别人已经写好了的代码,可以让我们直接拿来用。一个编程语言能不能流行起来,一方面取决于语法是否简单方便容易学习,一方面取决于生态是否完备。所谓的“生态” 指的就是语言是否有足够丰富的库,来应对各种各样的场景。在实际开发中,也并非所有的代码都自己手写,而是要充分利......
  • 使用Java和Neo4j构建图数据库应用
    使用Java和Neo4j构建图数据库应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代应用开发中,图数据库在处理复杂的关系和网络数据时表现出色。Neo4j是一个流行的图数据库,它允许我们以图的形式存储和查询数据。本文将介绍如何使用Java和Neo4j构......
  • 使用Java和Consul实现服务配置管理
    使用Java和Consul实现服务配置管理大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代微服务架构中,服务配置管理是一个重要的环节。Consul是一个用于服务发现和配置管理的工具,它提供了一个灵活的方式来管理和存储配置数据。本文将展示如何使用Java......
  • 使用Java和Google Guava简化开发
    使用Java和GoogleGuava简化开发大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!GoogleGuava是Google开发的一个Java开源库,它提供了许多工具和库来简化Java开发。Guava提供了从集合类到缓存、字符串处理、并发工具等多种功能。本篇文章将介绍如......
  • 使用Java和Spring MVC构建Web应用
    使用Java和SpringMVC构建Web应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代企业中,Web应用程序是最常见的应用类型之一。SpringMVC是一个强大且流行的JavaWeb框架,用于构建功能强大且易于维护的Web应用程序。本文将通过实际示例展示如......
  • 使用 useLazyFetch 进行异步数据获取
    title:使用useLazyFetch进行异步数据获取date:2024/7/20updated:2024/7/20author:cmdragonexcerpt:摘要:“使用useLazyFetch进行异步数据获取”介绍了在Nuxt开发中利用useLazyFetch进行异步数据加载的方法,强调其立即触发导航特性,与useFetch相似的使用方式,以及如何......
  • 使用Java和Elastic Stack进行日志分析
    使用Java和ElasticStack进行日志分析大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代企业中,日志分析是确保系统健康、进行故障排查和优化性能的重要环节。ElasticStack(ELKStack)是一个强大的工具集,包含Elasticsearch、Logstash和Kibana,能够有......
  • 使用 Elasticsearch Python SDK 查询 Easysearch
    随着数据分析需求的不断增长,高效查询和分析大数据集变得越来越重要。Easysearch作为一种强大的国产化搜索和分析引擎,同时作为Elasticsearch国产替代方案,支持原生DSL查询语法和SQL查询,确保原业务代码无需调整即可无缝迁移。Easysearch兼容ES7.x现有的SDK和索引存储格......
  • 新用户使用sudo命令报错
    新用户使用sudo命令报错情景:使用adduserimage,创建新用户image使用suimage,切换到新用户使用sudo命令,出现报错imageisnotinthesudoersfile.Thisincidentwillbereported.解决方案:切换到root用户:su-两种方法(任选其一)方法一:输入如下指令,将......
  • vue用到的各种三方插件的介绍和使用方法
    本篇文章用于自用,有的地方介绍的可能会不清楚,请谨慎观看本文会随着做的项目用到的东西会不断的更新1.@riophae/vue-treeselect@riophae/vue-treeselect是一个基于Vue.js的树形选择组件,用于在用户界面中展示和选择层次结构的数据,是一个树形的下拉菜单下载npminstall......