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

init函数不会在单元测试golang之前运行

init函数是Go语言中的一种特殊函数,它在程序运行时自动执行,用于初始化包或者执行一些初始化操作。然而,在单元测试中,init函数不会在测试之前运行。

在单元测试中,我们通常会创建一个测试文件,其中包含以Test开头的测试函数。这些测试函数会被自动执行,并且按照一定的顺序执行。然而,init函数不会被自动执行,因为它的目的是在程序运行时进行初始化,而不是在测试时。

如果我们需要在单元测试之前执行一些初始化操作,可以使用TestMain函数来实现。TestMain函数是一个特殊的测试函数,它可以在所有测试之前执行,并且可以在其中执行一些初始化操作。例如,我们可以在TestMain函数中调用需要在测试之前运行的init函数。

下面是一个示例代码:

代码语言:txt
复制
package main

import (
    "testing"
)

func init() {
    // 初始化操作
}

func TestMain(m *testing.M) {
    // 在所有测试之前执行的操作
    init()
    
    // 执行测试
    retCode := m.Run()

    // 在所有测试之后执行的操作

    // 返回测试结果
    os.Exit(retCode)
}

func TestSomething(t *testing.T) {
    // 测试代码
}

在上面的示例中,我们在TestMain函数中调用了init函数来进行初始化操作。然后,我们执行了测试,并在所有测试之后执行了一些清理操作。

需要注意的是,init函数和TestMain函数都是在包级别定义的,它们会在整个包的测试过程中起作用。因此,如果有多个测试文件,每个文件中的init函数和TestMain函数都会被执行。

总结起来,init函数不会在单元测试之前运行,但我们可以使用TestMain函数来在所有测试之前执行一些初始化操作。

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

相关·内容

golanginit和main默认函数

main() ,init()方法是go中默认的两个方法,两个保留的关键字。...init()方法 是在任何package中都可以出现,但是建议 每个package中只包含一个init()函数比较好,容易理解。但是main() 方法只能用在package main 中。...Go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个package中的init函数都是可选的,但package main就必须包含一个main函数。...当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。...等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数

81030
  • Golang升级到1.7后,之前正确的函数出现错误,分析原因及解决办法

    最近尝试把开发环境,升级到Golang1.7.1后,程序会偶发性的宕掉,查看日志后,发现总是在一个计算切片的哈希值的地方,错误信息是: unexpected fault address 0xc043df4000..., fatal error: fault 在1.7之前程序持续运行2年了,从来没有出现这个问题,怀疑是Golang编译器升级到SSA后导致的。...,记得之前看过Golang1.7在runtime包中,增加一个函数func KeepAlive(interface{}) {},查看注释后发现“使用该函数可以设定内存在指定的代码区保持有效”,而不被GC...SliceCrcTest和StringCrcTest查看运行结果;这里只介绍SliceCrcTest函数的内部实现思路,StringCrcTest和SliceCrcTest非常一致,请自己分析理解。...Allocation函数是模拟申请一次内存,函数返回后就内存会被GC回收。

    1.4K20

    Golang 单元测试框架 gocheck 使用介绍

    单元测试应该在的功能和参数上验证程序的正确性;单元测试过后,机器状态应该保持不变;单元测试运行、通过、失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性。...Gocheck 简介 gocheck 是 golang 语言比较健全且简单的单元测试框架,gocheck 在 golang 官方的testing package 之上,丰富了很多功能,丰富了单元测试常用的...对于测试的过程中我们经常要用到前期的大批量的读写文件操作,但是大量的数据文件可能会导致测试完成后服务器状态改变,为了遵循”单元测试过后,机器状态保持不变”的原则,我们需要在单元测试结束后自动清理掉单元测试运行中用到和产生的大量临时文件存储的数据...代码编写 创建临时文件夹以及临时文件内容 参数传递时将临时文件内容当问题详细内容参数,这样在测试代码运行结束后问题详细内容的参数就会被销毁不会在服务器上产生多余的文件。...最后 Gocheck 框架对 golang 代码进行单元测试比原生的单元测试框架写起来更方便和快速,函数库基本可以满足大部分的使用场景。 整个框架本身在 github 开源可以添加自己需要的函数库。

    1.7K20

    Go语言中常见100问题-#3 Misusing init functions

    init函数 init函数是一个不带参数并且无返回结果的函数(func()函数)。初始化Go程序包时,会先处理所有常量和变量声明,然后执行init函数init函数是在主函数main之前执行的。...foo包将在main包之前初始化,因此,foo中的init函数将被执行。...在init函数中执行打开数据库操作会阻止调用的客户端实现它们的错误处理逻辑。 问题2:与测试有关,如果我们要对上述程序文件进行单元测试,由于init函数将在运行测试函数之前执行,这不一定是我们期望的。...例如,如果待测函数不依赖数据库连接,即可以直接进行测试,但是在执行测试函数之前init函数先被执行,只有init函数成功执行,才能运行我们的单元测试,这使得编写单元测试变得很复杂。...一是init函数不会失败,除非http.HandleFunc出现特殊情况,这里的特殊情况是处理程序为nil,这不会在上述程序出现。二是不用创建全局变量。三是不会影响可能的单元测试

    35610

    如何写出优雅的 Golang 代码

    原文: https://draveness.me/golang-101.html Go 语言是一门简单、易学的编程语言,对于有编程背景的工程师来说,学习 Go 语言并写出能够运行的代码并不是一件困难的事情...虽然 Golang 中也有类似 Java 或者 Ruby try/catch 关键字,但是很少有人会在代码中使用 panic 和 recover 来实现错误和异常的处理,与 init 函数一样,Go 语言对于...单元测试是一个项目保证工程质量最有效并且投资回报率最高的方法之一,作为静态语言的 Golang,想要写出覆盖率足够(最少覆盖核心逻辑)的单元测试本身就比较困难,因为我们不能像动态语言一样随意修改函数和方法的行为...Mock 的主要作用就是保证待测试方法依赖的上下文固定,在这时无论我们对当前方法运行多少次单元测试,如果业务逻辑不改变,它都应该返回完全相同的结果,在具体介绍 Mock 的不同方法之前,我们首先要清楚一些常见的依赖...从理论上来说,通过猴子补丁这种方式我们能够在运行时 Mock Go 语言中的一切函数,这也为我们提供了单元测试 Mock 依赖的最终解决方案。

    1.6K30

    如何写出优雅的 Golang 代码

    Go 语言是一门简单、易学的编程语言,对于有编程背景的工程师来说,学习 Go 语言并写出能够运行的代码并不是一件困难的事情,对于之前有过其他语言经验的开发者来说,写什么语言都像自己学过的语言其实是有问题的...虽然 Golang 中也有类似 Java 或者 Ruby try/catch 关键字,但是很少有人会在代码中使用 panic 和 recover 来实现错误和异常的处理,与 init 函数一样,Go 语言对于...单元测试是一个项目保证工程质量最有效并且投资回报率最高的方法之一,作为静态语言的 Golang,想要写出覆盖率足够(最少覆盖核心逻辑)的单元测试本身就比较困难,因为我们不能像动态语言一样随意修改函数和方法的行为...Mock 的主要作用就是保证待测试方法依赖的上下文固定,在这时无论我们对当前方法运行多少次单元测试,如果业务逻辑不改变,它都应该返回完全相同的结果,在具体介绍 Mock 的不同方法之前,我们首先要清楚一些常见的依赖...从理论上来说,通过猴子补丁这种方式我们能够在运行时 Mock Go 语言中的一切函数,这也为我们提供了单元测试 Mock 依赖的最终解决方案。

    1.1K30

    开源项目的测试和质量保证

    欢迎大家来踩踩~ 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~ 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~ 希望本文能够给您带来一定的帮助文章粗浅...提高软件可靠性 经过充分测试的软件更具可靠性,用户可以更加信任软件的运行结果。稳定的软件有助于用户满意度的提升,同时也减少了用户和开发者的不必要的困扰。...测试策略和方法 单元测试 单元测试是针对软件中的最小单元(函数、方法等)进行的测试。它可以快速发现代码层面的问题,并在早期阶段进行修复。 集成测试 集成测试是测试不同模块之间的协作和交互。...// Linux内核中的一个单元测试示例 #include #include #include #include...\n"); } module_init(my_init); module_exit(my_exit); 总结 在开源项目中,测试和质量保证是确保软件稳定性和可靠性的重要手段。

    14610

    学习go语言编程之工程管理

    # 查看当前安装的Golang版本 go version # 查看go命令行工具的帮助信息 go help Go命令行工具可以完成如下工作: 代码格式化 代码质量分析和修复 单元测试与性能测试 工程构建...如上代码文档示例中,添加了4条注释:版权说明注释、包说明注释、函数说明注释和最后添加的遗留问题说明。 关于注释的编写,要遵守如下的基本规则: 注释需要紧贴在对应的包声明和函数之前,不能有空行。...构建示例如下: # calc是项目src目录下的包名 go build calc 单元测试 Golang本身提供了一套轻量级的测试框架,符合规则的测试代码会在运行测试时被自动识别并执行。...Golang单元测试函数分为两类:功能测试函数和性能测试函数,分别为以Test和Benchmark为函数名前缀并以*testing.T或*testing.B为单一参数的函数。...,最大的区别在于代码里的这个for循环,写这个for循环的原因是为了能够让测试运行足够长的时间便于进行平均运行时间的计算。

    20120

    Golang单元测试入门实践总结

    背景: 之前很长一段时间再写Golang程序时,不会有意识去写单元测试,直到后来写了独立项目后,慢慢才发现给一个功能编写对应的单元测试是多么高效和方便,接下来就再一起复习下Golang中的测试....而在Golang语言中内置了一系列的测试框架,加下来就主要讲讲UnitTest单元测试的相关知识点。...UnitTest的编写 注意:在Golang中,对于单元测试程序来说通常会有一些重要约束,主要如下: 单元测试文件名必须为xxx_test.go(其中xxx为业务逻辑程序) 单元测试函数名必须为Testxxx...(xxx可用来识别业务逻辑函数) 单元测试函数参数必须为t *testing.T(测试框架强要求) 测试程序和被测试程序文件在一个包package中 # 示例文件 # 假设我们为某段业务逻辑专门写了一个...单元测试中常用的命令参数: # 对当前目录下的全部单元测试程序进行运行测试(也就是所有的xxx_test.go文件中的所有function都会运行) $ go test the rectangular

    80540

    9.Go编程快速入门学习

    不过在介绍之前,我们先介绍一个Go语言的标准库为我们提供的单元测试与基准测试的辅助工具,有一个叫做 testing 的测试框架, 可以用于单元测试和性能测试,它是和go test命令一起使用的,它是一个按照一定约定和组织的测试代码的驱动程序...在*_test.go文件中有三种类型的函数单元测试函数、基准测试函数和示例函数。...1.单元测试 描述: 类似于细胞是构成我们身体的基本单位,一个软件程序也是由很多单元组件构成的,单元组件可以是函数、结构体、方法和最终用户可能依赖的任意东西,总之我们需要确保这些组件是能够正常运行的。...Tips: 通常我们使用的都是语句的覆盖率,也就是在测试中至少被运行一次的代码占总代码的比例。 例如,此时我们使用1.1单元测试中的示例进行。...golang.org的godoc文档服务器上使用Go Playground运行示例代码。

    65920

    初识Rust

    之前也接触过一点,还写了个goroutine压力测试对比我的libcopp的性能。但是golang的语法我实在不喜欢,特别是那个不管啥类型声明都是反着来,感觉在复杂的类型下会非常反人类。...而且听用过的人说golang的GC还很不稳定。另外之前有新闻说golang正在准备2.0,2.0版本即将加入泛型支持,然后导致很多语法不兼容和语法分析得重写。...本来我觉得golang函数声明的关键字是 func 已经很偷懒了。结果Rust这货更短,是 fn 。之前看到一个文章是说啥来着现在完全没必要使用缩写的。...工程化 测试框架 单元测试、集成测试和压力测试 Rust 自带单元测试、集成测试和文档测试框架并且可以直接通过执行 cargo test [查找名] 来运行。...(猜测是不会在运行服务器上在线Run) ignore => 忽略代码 allow_fail => 标识Rust代码能够编译和运行,但是允许运行失败 rust => Rust代码 test_harness

    1.5K40

    Go 单元测试

    单测的特征: A:(Automatic,自动化):单元测试应该是全自动执行的,并且非交互式的 I:(Independent,独立性):为了保证单元测试稳定可靠且便于维护,单元测试用例之间决不能互相调用,...测试人员不仅要测试他们的新特性,还要测试以前存在的特性,以验证之前实现的特性是否仍然像预期的那样运行。...通过单元测试,可以在每次构建之后,重新运行整个测试流程,以确保新代码不会破坏已有功能 测试异常场景 一些异常的场景QA不好构造,比如并发出款是否资金安全,事务异常相关测试等等。...Go 单元测试工具 gomonkey 引入 gomonkey 有如下好处: 隔离被测代码 加速执行测试 使执行变得确定 模拟特殊情况 功能列表 支持为一个函数打一个桩 支持为一个函数打一个特定的桩序列...如果有多协程并发对同一个目标的打桩的情况,则需要将之前的协程先优雅退出。 打桩目标为内联的函数或成员方法。

    98520

    Golang 语言怎么编写测试代码?

    Golang 语言中,可以使用标准库 testing 包编写单元测试和基准测试,使用 go test 命令执行单元测试和基准测试的代码。本文我们介绍在 Golang 语言中怎么编写测试代码。...03 编写测试代码 单元测试 所谓单元测试,顾名思义就是对单元进行测试,一般进行测试的单元是一个最小的单元,在 Golang 语言中,最小的单元就是指一个函数或方法。...此外,go test 支持一些参数,例如,-v 输出测试函数运行详情;-run 指定执行的测试函数;-count 指定执行次数。...go tool cover -html=func.cover -o func_cover.html 运行以上命令,会生成一个名为 func_cover.html 的文件,我们可以使用浏览器打开它,查看详细的单元测试覆盖率统计结果...参数必须是 *testing.B 类型,函数体中 for 循环的条件,以 b.N 作为循环次数,它是基准测试框架提供的,它在 Golang 运行时动态调整,通过多次测试,得到性能评估结果。

    2K20

    走进Golang之编译器原理

    首先先来认识一下go的代码源文件分类 命令源码文件:简单说就是含有 main 函数的那个文件,通常一个项目一个该文件,我也没想过需要两个命令源文件的项目 测试源码文件:就是我们写的单元测试的代码,都是以...机器只能够理解二进制并运行,所以编译器后端的任务简单来说就是怎么把AST翻译成机器码。 中间码生成 既然已经拿到AST,机器运行需要的又是二进制。为什么不直接翻译成二进制呢?...但是, 我们有各种各样的操作系统,有不同的CPU类型,每一种的位数可能不同;寄存器能够使用的指令也不同,像是复杂指令集与精简指令集等;在进行各个平台的兼容之前,我们还需要替换一些底层函数,比如我们使用make...中间码也是有多种格式的,像 Golang 使用的就是SSA特性的中间码(IR),这种形式的中间码,最重要的一个特性就是最在使用变量之前总是定义变量,并且每个变量只分配一次。...首先看入口函数 cmd/compile/main.go:main() var archInits = map[string]func(*gc.Arch){ "386": x86.Init

    1.5K20
    领券