首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

永远不会调用TestMain m.Run()之后的Teardown函数

在Go语言中,TestMain函数是测试用例的入口函数,它可以用来在执行测试用例之前进行一些初始化操作,以及在测试用例执行完毕后进行一些清理操作。TestMain函数必须位于_test.go文件中,并且必须在包级别声明。

在TestMain函数中,我们可以通过调用m.Run()来运行测试用例。m.Run()会执行所有的测试函数,并生成测试报告。在m.Run()之后的代码将不会被执行。

Teardown函数是一种常见的清理操作,用于释放资源、关闭连接等。通常情况下,我们会在TestMain函数中调用Teardown函数来确保在测试用例执行完毕后进行必要的清理工作。

以下是一个示例代码:

代码语言:txt
复制
package main

import (
    "testing"
)

func TestMain(m *testing.M) {
    // 初始化操作

    // 运行测试用例
    code := m.Run()

    // 执行Teardown函数
    Teardown()

    // 退出测试
    os.Exit(code)
}

func Teardown() {
    // 清理操作
}

在上述示例中,我们可以在TestMain函数中进行一些初始化操作,然后调用m.Run()来运行测试用例。在测试用例执行完毕后,会执行Teardown函数进行清理操作。

需要注意的是,Teardown函数的具体实现会根据具体的测试场景而定。例如,如果涉及到数据库连接,可以在Teardown函数中关闭数据库连接;如果涉及到文件操作,可以在Teardown函数中删除临时文件等。

腾讯云提供了丰富的云计算产品和服务,可以根据具体需求选择相应的产品。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方文档或咨询腾讯云的技术支持。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Go高阶指南19,测试功能详解-下

子测试 子测试可以使多个测试函数共用部分代码,比如有两个测试函数 A 和 B,有相同初始化程序,使用子测试函数可以将A、B函数合并到一个函数中,对于它们相同初始化程序便可以提取出来合并到一起。...t.Run() 函数声明如下: func (t *T) Run(name string, f func(t *T)) bool 参数: name 为子测试名字, f 为子测试函数; Run() 一直阻塞到...retCode := m.Run() // 执行测试,包括单元测试、性能测试和示例测试 fmt.Println("TestMain tear-down.")...和Tear-down 日志打印两行分别对应 Setup 和 Tear-down 代码; m.Run()即为执行所有的测试,m.Run() 返回结果通过 os.Exit() 返回。...TestMain执行时,命令行参数还未解析,如果测试程序需要依赖参数,可以使用 flag.Parse() 解析参数,m.Run()方法内部还会再次解析参数,此处解析不会影响原测试过程。

39231

Go语言中常见100问题-#90 Not exploring all the Go testing features

可以使用 setUp和tearDown测试固件来执行创建与销毁操作。 在每次测试时调用设置函数预先执行,结合defer函数调用销毁函数当测试执行完后, 示例代码如下。...注意,我们可以注册多个cleanup函数,它们调用顺序像defer那样,先注册后被调用。...("clean up 2") }) 通过TestMain函数可以在运行所有测试前执行一些初始化逻辑(如创建数据库链接),或所有测试都运行结束之后执行一些清理逻辑(释放数据库连接),如果测试文件中定义了这个函数...这个函数默认行为就是运行文件中定义测试。我们自定义TestMain()函数时,也需要手动调用m.Run()方法运行测试函数,否则测试函数不会运行。...默认TestMain函数如下: func TestMain(m *testing.M) { os.Exit(m.Run()) } 编写自定义TestMain函数,在测试函数执行前执行后做一些其它逻辑

23630
  • 深入掌握 Go 单元测试:从基础到进阶完整指南

    TestMain 函数 TestMain 在测试模块里是一个特殊函数,用于在执行测试之前或之后执行全局初始化和清理工作,它是整个测试包入口点。...在运行 go test 命令之后,首先会检查包测试文件里是否定义了 TestMain 函数,如果有,则会调用它来执行测试。如果没有 TestMain 函数,则会默认调用所有的 TextXxx 函数。...TestMain 函数签名如下所示: TestMain(m *testing.M) TestMain 函数通常结合 setup 和 teardown 函数一起使用,前者用于在测试执行之前做一些准备工作...teardown() os.Exit(code) } 关键代码解释: m.Run():通过该方法执行所有的测试函数。...测试不会继续执行后续代码。

    27442

    测试驱动开发与 golang 单元测试

    5. testing.T 中报告方法 上面的例子中,我们使用到了 testing.T 中 Errorf 方法,他打印出了错误信息,但事实上,他并不会中断程序执行。...TestMain 子测试让我们能够嵌套测试函数,在若干个测试函数之前、之后或之间进行一些操作。 但我们是否可以定义,无论在什么情况下,只要测试函数执行,他前后就必须执行一些操作呢?...func TestMain(m *testing.M) 只要测试文件中包含该函数,那么,无论执行测试文件中哪个函数,都会先去运行 TestMain 函数。...在 TestMain 函数中,通过 m.Run() 就可以调用本次预期将会执行测试函数。 不难看出,这是一个面向切面编程思想应用。 7.1....示例 func TestMain(m *testing.M) { // do someting setup exitCode := m.Run() os.Exit(exitCode

    96710

    GO-操作数据库

    如果要检查数据源名称是否合法,应调用返回值 Ping 方法。 ? 返回 DB 可以安全被多个 go 程同时使用,并会维护自身闲置连接池。这样一来,Open 函数只需调用一次。...所以还可以通过调用 DB Exec 方法添加用户(以下只展示了 user.go 文件修改之后 AddUser 方法) func(user * User) AddUser() error {...如果一个测试函数函数不是以 Test 开头,那么在使用 go test 命令时默认不会执行,不过我们可以设置该函数时一个子测试函数,可以在其他测试函数里通过 t.Run 方法来执行子测试函数,具体代码如下...:", * user) } 我们还可以通过 TestMain(m *testing.M)函数在测试之前和之后做一些其他操作 a) 测试文件中有 TestMain 函数时,执行 go test 命令将直接运行...TestMain函数,不直接运行测试函数,只有在 TestMain 函数中执行 m.Run()时才会执行测试函数 b) 如果想查看测试详细过程,可以使用 go test -v 命令 c) 具体代码

    1.5K20

    【730】测试:小心并发测试中测试陷阱

    当变量在堆上时,每个并发单元测试取到都是同一个内存数据数据,也就是for最后循环值;而当变量在栈上时,每个Go程(一个单元测试是一个独立Go程)都有自己栈,相互之间不会影响。...关于TestMain 现在我们了解了所有基本测试技巧,也可以以并发、串发方式组合进行复杂测试了。...还有一种情况需要了解,假设我们需要在一个单元测试启动之前做一些事情,以及在完成之后做一些事情,这种情况怎么处理? 当然这种情况也可以使用子测试解决,但Go语言提供了一种更方便方法:TestMain。...TestMain是测试文件中默认先测试函数函数中间要显式调用m.Run(),这时候才正式执行测试。测试之后事情也可以在这里设置。...m.Run()之前代码Setup代码,之后代码是Teardown代码。

    1.8K20

    在项目里怎么给 GORM 做单元测试

    Go 测试支持在包内优先执行一个 TestMain(m *testing.M) 函数,可以在这里为 package 下所有测试做一些初始化工作。 下面是我们为本次测试做初始化工作。...是在当前package下,最先运行一个函数,常用于初始化 func TestMain(m *testing.M) { //把匹配器设置成相等匹配器,不设置默认使用正则匹配 db, mock, err...= nil { panic(err) } _DB, err = gorm.Open("mysql", db) // m.Run调用包下面各个Test函数入口 os.Exit(m.Run...()) } 在这个初始化函数里我们创建一个 sqlmock 数据库连接 db 和 mock对象,mock对象管理 db 预期要执行SQL。...m.Run调用包下面各个Test函数入口。 准备工作做好了,下面正式对 DAO 操作进行Mock测试。 对Create进行Mock测试 首先对 GORM Create 方法进行Mock测试。

    1.9K20

    Go 每日一库之 testing

    ,然后针对每个整数调用ToRoman()函数,比较返回罗马数字字符串和错误值是否与预期相符。...这时可以将url_test放在一个独立包中。 主测试函数 有一种特殊测试函数函数名为TestMain(),接受一个*testing.M类型参数。...如果测试文件中定义了这个函数,则go test命令会直接运行这个函数,否则go test会创建一个默认TestMain()函数。这个函数默认行为就是运行文件中定义测试。...我们自定义TestMain()函数时,也需要手动调用m.Run()方法运行测试函数,否则测试函数不会运行。...默认TestMain()类似下面代码: func TestMain(m *testing.M) { os.Exit(m.Run()) } 下面自定义一个TestMain()函数,打印go test

    75610

    Golang 测试教程

    How to write test with golang 代码示例 TDD(Test-Driven development) 测试驱动开发 内置 testing 库 、 表格驱动、样本测试、TestMain...对软件组成单元进行测试,最小单位:函数 包含三个步骤: 指定输入 指定预期 函数结果和指定预期比较 指标: 代码覆盖率:运行测试执行代码占总代码行数 testing 库使用 // Hello...(Hello()) // Output: // Hello World } TestMain: 包测试运行之前执行 func TestMain(m *testing.M) {...开头,输入使用注释形式 TestMain 每个包只有一个,参数为 *testing.M 覆盖率: go test -cover go test -coverprofile=cover.out go...allowed } // 过程 guard := Patch(DestroyResource, func(_ string) { }) defer guard.Unpatch() 使用思路,被测函数中需要使用其他依赖函数

    1.7K20

    上次问题解决啦,重新送上Go ORM 单元测试全流程讲解

    Go 测试支持在包内优先执行一个 TestMain(m *testing.M) 函数,可以在这里为 package 下所有测试做一些初始化工作。 下面是我们为本次测试做初始化工作。...是在当前package下,最先运行一个函数,常用于初始化 func TestMain(m *testing.M) { //把匹配器设置成相等匹配器,不设置默认使用正则匹配 db, mock, err...= nil { panic(err) } _DB, err = gorm.Open("mysql", db) // m.Run调用包下面各个Test函数入口 os.Exit(m.Run...()) } 在这个初始化函数里我们创建一个 sqlmock 数据库连接 db 和 mock对象,mock对象管理 db 预期要执行SQL。...m.Run调用包下面各个Test函数入口。 准备工作做好了,下面正式对 DAO 操作进行Mock测试。 对Create进行Mock测试 首先对 GORM Create 方法进行Mock测试。

    87640

    如何写好 GO 语言单元测试

    用断言来代替原生报错函数 让我们看这样一个例子:  ? GO 语言提供 Error 太不友好了,判断 if 需要写在前头。...当一切正常时,我们还不会意识到这样坏处,然而当糟糕事情发生时,随机结果让我们难以 debug。 比如,上例在大多数时候都能正常运行,唯有当 b 随机到 0 时会 crash。...这样任务如果在每个测试用例中都重复执行,那不仅是的代码冗余,也是资源浪费。我们可以让 TestMain 来帮我们执行这些前置和后置任务: ?...TestMain 函数是 GO 测试框架入口点,运行 m.Run 会执行测试。TestMain 函数不是必须,除非确实有必要在 m.Run 前后执行一些任务,我们完全可以不实现这个函数。...4、箭头式代码,提升了圈复杂度,也降低了可测性 5、将内部逻辑与外部请求分开测试(small测试) 6、函数太复杂,没有拆分到位,让单个函数功能行为单一且简单 7、大量使用成员方法和函数,不利于传参进行测试

    2K20

    Go语言微服务框架 - 5.GORM库适配sqlmock单元测试

    -- main.go 项目启动main函数 1.Order相关代码改造 我们要对Order相关代码进行改造,来满足以下两个点: 可测试性,可以脱离对真实数据库连接依赖...2.0,网上很多例子其实是针对1.0 var ( DB *gorm.DB mock sqlmock.Sqlmock ) // TestMain是在当前package下,最先运行一个函数,...常用于初始化 func TestMain(m *testing.M) { var ( db *sql.DB err error ) db, mock, err = sqlmock.New...= nil { panic(err) } // m.Run 是真正调用下面各个Test函数入口 os.Exit(m.Run()) } /* sqlmock 对语法限制比较大,下面的sql...总结 通过这一个小版本,我们让DAO这个与数据库交互模块代码更具可读性(从调用侧可以清楚地了解到要做什么)、健壮性(单元测试)和可扩展性(对后续字段扩展也很容易支持)。

    2K20

    Golang 单元测试 - 数据层

    parseTime=true", } tearDown func() testDataSource *xorm.Engine ) func TestMain(t *testing.M...TestMain:这个方法是 golang test 一个特性,它会在所有 单元测试 之前自动执行,特别适合用于初始化数据和清理测试遗留环境。...dbUser.Username) err = ur.DelUser(context.TODO(), user.ID) assert.NoError(t, err) } 可以看到我们只需要像平常写代码一样直接调用对应方法就可以进行单元测试了...单元测试需要注意是,我们这里测试是添加用户,也就是插入数据,为保证单元测试独立性,测试完当前方法后数据应该保持一致,故需要进行数据删除,以保证不会干扰到其他单元测试。...故,本地测试之后可以使用 docker ps 命令查看是否有遗留 当然根据所需要数据源不同,你可以使用其他不同镜像进行操作,效果是一样 总结 repo 数据层单元测试通过 docker 来启动数据源进行测试

    98320

    极简版抖音项目的实现(2) —— Mock 和单元测试 | 青训营笔记

    首先,在 TestMain 函数中初始化数据,这包括我们一些预先设定好来自上游服务测试数据和我们预期结果数据: const mockVideoCount = 50 var ( testVideos...) respVideos = make([]*feed.Video, mockVideoCount) ) var mockUser = user.User{Id: 65535} func TestMain...testVideos = reverseModelVideo(testVideos) respVideos = reverseFeedVideo(respVideos) code := m.Run...接下来,在 TestFeedServiceImpl_ListVideos 函数中编写正式开发流程: func TestFeedServiceImpl_ListVideos(t *testing.T)...biz.OkStatusCode, User: &mockUser}, nil } 上述代码首先初始化了一些请求数据,然后对 UserClient 和数据库进行了 Mock(Mock 可以理解为,将原有的函数和方法实现替换成仅在测试可用特殊实现

    60410
    领券