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

go测试用例没有在主包中运行

基础概念

Go 语言中的测试用例是通过 testing 包来实现的。测试用例通常放在与被测试代码相同的包中,但文件名以 _test.go 结尾。测试用例函数必须以 Test 开头,并且接受一个 *testing.T 类型的参数。

相关优势

  1. 简洁性:Go 的测试框架非常简洁,易于学习和使用。
  2. 并行测试:可以轻松地并行运行测试用例,提高测试效率。
  3. 丰富的断言库:虽然 Go 的 testing 包本身提供的断言功能有限,但可以通过第三方库(如 testify)来增强断言功能。
  4. 集成到 CI/CD:可以轻松地将 Go 测试集成到持续集成和持续部署(CI/CD)流程中。

类型

  1. 单元测试:测试单个函数或方法的行为。
  2. 集成测试:测试多个组件或服务之间的交互。
  3. 端到端测试:模拟用户操作,测试整个系统的功能。

应用场景

  • 开发过程中,确保代码的正确性和稳定性。
  • 在持续集成和持续部署流程中,自动运行测试用例,确保每次代码变更不会引入新的问题。

问题原因及解决方法

问题描述

Go 测试用例没有在主包中运行。

原因

  1. 测试用例文件位置不正确:测试用例文件必须放在与被测试代码相同的包中,并且文件名以 _test.go 结尾。
  2. 测试用例函数命名不正确:测试用例函数必须以 Test 开头,并且接受一个 *testing.T 类型的参数。
  3. 运行测试的方式不正确:必须使用 go test 命令来运行测试用例。

解决方法

  1. 确保测试用例文件位置正确
  2. 确保测试用例文件位置正确
  3. 确保测试用例函数命名正确
  4. 确保测试用例函数命名正确
  5. 使用 go test 命令运行测试用例
  6. 使用 go test 命令运行测试用例

示例代码

假设我们有一个简单的包 mypackage,其中包含一个函数 Add,我们需要编写测试用例来测试这个函数。

mypackage/main.go

代码语言:txt
复制
package mypackage

func Add(a, b int) int {
    return a + b
}

mypackage/mypackage_test.go

代码语言:txt
复制
package mypackage

import (
    "testing"
)

func TestAdd(t *testing.T) {
    result := Add(2, 3)
    if result != 5 {
        t.Errorf("Add(2, 3) = %d; want 5", result)
    }
}

运行测试用例

代码语言:txt
复制
go test ./...

参考链接

通过以上步骤,你应该能够正确运行 Go 测试用例,并确保测试用例在主包中正常运行。

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

相关·内容

Go 单元测试从 0 到 1

通过单元测试,我们可以设置多个测试用例,执行要测试的函数,判断是否符合预期。尽可能达保证函数功能没有问题,或者出现我们预知的错误。...将该文件放在与被测试文件相同的包中,该文件将被排除在正常的程序包之外,但在运行 go test 命令时将被包含。...在源码文件中”右键函数名 > Generate… > Test for function“ 便可以快速生成对应函数的单测代码模板,然后我们在生成的模板代码中添加具体的测试用例即可。...,且报告覆盖率为 100%. 7.使用单测框架写单测 学会使用 Go 官方 testing 包写单元测试是远远不够的,因为实际项目开发中,面对复杂的逻辑判断,繁多的测试用例,网络IO调用等,都加大了单测编写与管理的难度...8.小结 关于单元测试,本文从 0 到 1 讲解了 Go 如何编写测试用例,熟练掌握 Golang 中单元测试的书写是一位合格 gopher 的必备技能。

69520

一文了解一线互联网大厂的 Golang 单测最佳实战经验

• gomonkey 不支持异包未导出函数的打桩、不支持同包未导出方法的打桩 mocker(mock) 模拟的原理和细节 Mock 是在测试过程中,对于一些不容易构造/获取的对象,创建一个Mock 对象来模拟对象的行为...并且表驱动的方式如果有测试用例的话,那么可能导致在我们的 IDE 上屏都展现不完,也就是比较占地方。...,过度使用 Mock 可能带来以下三个问题: • 让测试代码更难以理解 • 测试用例更难维护 • 测试用例无法保证代码能正常工作 适合 mock 的场景 如下这些场景的情况下,比较适合使用 mock :...合适的单测命令 如下的单测命令,可以打印详细信息,计算单测覆盖率,同时通过 gcflags=all=-N -l' 来覆盖所有在 GOPATH 中的包,并且禁用了内联优化。...我们在单测过程中,不要直连真正的数据库有如下几个原因: • 在单测的时候,可能根本就没有权限连接(比如,缺乏账号密码啥的) • 即便连接上了,那么也不应该真正操作数据库,因为这个可能会对数据库造成一些压力甚至是脏数据

2.4K20
  • Golang单元测试

    1、单元测试概述 1.1 什么是单元&单元测试 1.2 为什么进行单元测试 1.3 单元测试用例编写的原则 1.4 单测用例规定 2、golang 常用的单测框架 2.1 testing 2.1.1...1.2 为什么进行单元测试 保证变更/重构的正确性,特别是在一些频繁变动和多人合作开发的项目中 简化调试过程: 可以轻松的让我们知道哪一部分代码出了问题 单测最好的文档:在单测中直接给出具体接口的使用方法...,是最好的实例代码 1.3 单元测试用例编写的原则 单一原则:一个测试用例只负责一个场景 原子性:结果只有两种情况:Pass、Fail 优先要核心组件和逻辑的测试用例 高频使用库,util,重点覆盖 1.4...单测用例规定 文件名必须要xx_test.go命名 测试方法必须是TestXXX开头 方法中的参数必须是t *testing.T 测试文件和被测试文件必须在一个包中 2、golang 常用的单测框架...结尾的文件,调用测试文件中以 Test或Benchmark开头的函数并给出运行结果 测试函数需要导入testing包,并定义以Test开头的函数,参数为testing.T指针类型,在测试函数中调用函数进行返回值测试

    80120

    Go 单元测试基本介绍

    如果这个时候你的修改导致测试用例失败,你再重新审视自己的修改,发现之前的修改还有一些特殊场景没有包含,恭喜你减少了一次上库失误。...而且在开发过程中,效率最高的莫过于所见即所得了,单元测试也能够帮助你做到这一点,试想一下,假如你一口气写完一千行代码,debug 的过程也不会轻松,如果在这个过程中,对于一些逻辑较为复杂的函数,同时添加一些测试用例...当运行 go test 命令时,go test 会遍历所有的 *_test.go 中符合上述命名规则的函数,然后生成一个临时的 main 包用于调用相应的测试函数,然后构建并运行、报告测试结果,最后清理测试中生成的临时文件...当指定时,命令行参数必须精确匹配主模块中的一个包,并且正则表达式必须精确匹配该包中的一个模糊测试。...借助帮助函数,可以让测试用例的主逻辑看起来更清晰。

    19510

    看点信息流Go后台单元测试有效性提升

    变异测试(Mutation Testing)通过模拟典型应用错误,或者是强制产生有效地测试来定位测试用例设计中的弱点。本文将详细介绍看点信息流Go后台如何提升单测有效性的过程和结果。...解决方法:在Mock函数中使用stmock.Eq()进行输入参数验证。 ? ? 6. 逻辑判断 逻辑判断时存在多种组合,当前测试用例并没有全面覆盖,导致变异体存活。...已覆盖函数,出现大量存活变异体 该函数在其他函数中存在调用,所以在覆盖率统计时被算作已覆盖,但无测试用例来检验该函数。 解决方法:新增单测用例 ? 8....10.数值计算: 变异体通过变换运算符出现在某一个数值计算中。 解决方法:在测试用例中需要对数值进行确认。 case1: ? 11.条件语句遗漏 变异体检测出条件语句存在遗漏分支。...对变异测试工具、本地运行、平台和流水线搭建、变异体分析、单测用例优化进行了详细的描述。通过尝试变异测试在满足EPC要求的前提下,对自动化用例的有效性进行提升。

    1.7K30

    BDD与单元测试相关问题介绍

    java的单元测试原理 原理描述 java进程的启动依赖于唯一的main函数,java中的junit采用插件隐藏main函数的方式,我们右键运行某测试用例。其本质上传入的是测试用例的路径。...在idea中选中包路径运行整个包下的测试用例,相当于启动了若干个runner任务。 @RunWith是什么? 不同的测试工具有不同的单测规则,原理基本如上段所述。...在不指定@RunWith的时候会创建一个默认简单的单测构造器,然后直接去执行测试用例。@RunWith的作用是为了解决版本问题。但是有时候没有版本问题就不需要添加这个注解。...(单元测试的main主函数从此触发) 引入maven依赖 核心解析包 试用例 4、执行单测 右键我们的feature文件 5、与spring的整合 在和spring整合这块,cumuber提供了cumuber-spring的jar包。

    90110

    一文说尽Golang单元测试实战的那些事儿

    腾讯后台开发工程师张力结合了公司级漏洞扫描系统洞犀在DevOps上探索的经验,以Golang为例,列举了编写单元测试需要的工具和方法,然后针对写单测遇到的各种依赖问题,详细介绍了通过Mock的方式解决各种常用依赖...本文结合了公司级漏洞扫描系统洞犀在DevOps上探索的经验,以Golang为例,列举了编写单元测试需要的工具和方法,然后针对写单测遇到的各种依赖问题,提出相应的解决办法,并展示了自动化单元测试的结果。...二、测试工具与方法 1.测试框架 相信大家都熟悉go内置了go test测试框架来执行和管理测试用例。...如下所示,该文件的测试用例都会在m.Run里运行,如果成功返回0否则非零,因此可以判断执行是否成功。值得注意的是最后应该使用code作为os.Exit参数退出。...3.有没有更好折中方案 有时候函数逻辑比较复杂导致插桩过程繁琐,或者有些依赖不方便 mock,那么是否能在执行测试用例的时候创建一个本地测试环境,里面包含了各种依赖,这样或许会方便很多。

    1.4K40

    单元测试整理

    我们可以分如下2个阶段:万事开头难,先要会写,先把自动化流水线搞起来,覆盖率报告收集起来,没有写单侧可以通过报表查看到。稳重求进,追求质量和效率,同时关注可测性问题,对测试用例质量进行要求。3....4.2 等价类划分法等价类划分法假定某一特定的等价类中的所有值对于测试目的来说是等价的,所以在每个等价类中找一个之作为测试用例。...准备测试用例:确保基本路径集中的每一条路径的执行。5. 如何评估单元测试的质量?虽然目前并没有直接的指标去衡量单测的质量,但是我们可以通过一些间接手段保证单元测试的质量。...断言框架由于Golang原生没有提供断言,所以我们需要考虑引入Golang的一些断言组件,下面是几种比较常见的测试框架测试框架推荐指数Go自带的testing包★★☆☆☆GoConvey★★★★★Testify...7.2 goconveygithub地址:https://github.com/smartystreets/goconvey 特性:直接集成go test可以管理和运行测试用例提供了丰富的断言函数支持很多

    1.1K71

    亲测体验Go语言模糊测试

    作用 发现安全漏洞:如缓冲区溢出、内存泄漏、注入攻击等,这些通常在正常的测试用例中可能被忽略。 增强软件稳定性:帮助开发者识别和修复导致程序崩溃或行为异常的代码。...执行程序:将这些测试用例作为输入提供给待测试的程序。 监控程序行为:检测程序崩溃、功能失败、代码异常执行等问题。 分析结果:如果程序在处理某个输入时失败,分析其原因并报告。...语料库来源 语料库是模糊测试中使用的一组数据,用于生成测试用例。通常来自以下来源: 现有的测试用例:利用已有的测试数据作为基础,通过变异生成新的测试用例。...,更多可以参考TonyBai老师的这篇文章: Go 1.18新特性前瞻:原生支持Fuzzing测试[7] 以及 你需要了解的 Go 中的模糊测试 | Linux 中国 亲测体验 先写一个Multiply...再编写一个模糊测试来捕捉单测未发现的 Bug 模糊测试是一种自动化测试技术,用于生成随机输入数据来测试程序。在 Go 中,可以使用 testing 包提供的 Fuzz 功能来实现模糊测试。

    20910

    Go 单元测试之mock接口测试

    6.2 设计测试用例 6.3 执行测试用例代码 6.4 运行测试用例 6.5 不是所有的场景都很好测试 一、gomock 工具介绍 gomock 是一个 Go 语言的测试框架,在实际项目中,需要进行单元测试的时候...如果其中一个接口没有指定自定义名称,则将使用默认命名约定。 -self_package:生成的代码的完整包导入路径。使用此flag的目的是通过尝试包含自己的包来防止生成代码中的循环导入。...单元测试里面常见,集成测试一般没有。 数据准备:每一个测试用例需要的数据。集成测试里常见。 数据清理:每一个测试用例在执行完毕之后,需要执行一些数据清理动作。集成测试里常见。...6.2 设计测试用例 测试用例定义和运行测试用例都是很模板化的东西。测试用例就是要根据具体的方法来设计。 如果是单元测试:看代码,最起码做到分支覆盖。...6.4 运行测试用例 测试里面的testCases是一个匿名结构体的切片,所以运行的时候就是直接遍历。 那么针对每一个测试用例: 首先调用mock部分,或者执行before。 执行测试的方法。

    20310

    Golang 单元测试详尽指引

    单元测试用例编写的原则 3.1 理论原则 快。单元测试是回归测试,可以在开发过程的任何时候运行,因此运行速度必须快 一致性。代码没有改变的情况下,每次运行得结果应该保持确定且一致 原子性。...4.2 等价类划分法 等价类划分法假定某一特定的等价类中的所有值对于测试目的来说是等价的,所以在每个等价类中找一个之作为测试用例。...将该文件放在与被测试文件相同的包中。该文件将被排除在正常的程序包之外,但在运行 go test 命令时将被包含。...对于局部数据结构测试,应检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整性、正确性。局部数据结构往往是错误的根源,应仔细设计测试用例。...Go 单元测试框架是相当易用的,其它的第三方库基本都是建立在 testing 原生框架的基础上进行的增补扩充,在日常开发中,原生包可以满足基本需求,但同样也有缺陷,原生包不提供断言的语法使得代码中的这种片段非常多

    4.6K1158

    Go 1.18 新增三大功能之一“模糊测试”使用方式

    在 Go 1.18 中,Go 语言新增模糊测试,本文我们介绍模糊测试的使用方式。...02 使用方式 Go 语言的模糊测试,与其他三种测试方式相同,测试文件的文件名以 _test.go 结尾,测试文件中必须导入 testing 包。...但是,在实际项目开发中,我们很难考虑到所有测试用例,比如上面这段代码运行结果是通过测试,我们一般就会认为定义的反转字符串函数 Reverse 功能正常。...实际结果并非如此,我们在测试用例中加入一组中文字符串,{"我爱学编程", "程编学爱我"},,我们再运行功能测试代码,得到的结果就是未通过。...模糊测试,就是 Go 自动为我们的代码提供输入的测试用例,并可以测出相比我们自己提供测试用例所考虑不到的边缘情况。

    31820

    Golang单元测试系列-如何更好的写测试用例

    前面写了快速上手,会非常快速的创建测试用例,搭建一个单元测试的架子,但是如何来更好的写测试用例呢?我们如何来提升 单测的交互呢 ?...使用goconvey提升单测交互GoConvey是一个非常好用的Go测试框架,它直接与go test集成,提供了很多丰富的断言函数,能够在终端输出可读的彩色测试结果,还支持全自动的Web UI。...,省略了调用包内函数时的包名前缀,是goconvey推荐的写法。convey函数支持平铺罗列,也支持二层、三层嵌套,用于更细粒度拆分单测用例,一般写两层就够了。...执行go test -v -run Xxx,获取单测结果,可以看到测试用例层级展示,每个So断言对应一个√,出错时可以方便的定位到失败的断言。...这样在 为我们的业务代码:GetStudentTermResult 编写测试用例的时候,就可以直接mock MySQL的操作,测试就非常方便,我们只需要关注 测试业务代码本身是否符合预期就可以了。

    1.6K40

    Go 单测高级篇:Golang 单测原理深入理解

    不知道大家有没有想过,Go 的单测,为何能够 mock 住呢?具体是怎么实现的呢?然后这个 mock 的真正含义又是什么呢?...于是,网上找了一圈,发现这些答案都是零零散散在各个文章中,并且有些原理和实践还没有找到。于是乎,我整理了一篇文章。...Go 中,函数体内包含:闭包调用,select ,for ,defer,go 关键字的的函数不会进行内联。并且除了这些,还有其它的限制。...在测试用例中创建一个模拟的方法(函数),用于替换原有自己代码中的方法(函数)• stub 一般就是在运行时替换了外部依赖返回的结果,并且结果不能调整(成本很高、不容易维护)。...在测试用例中创建一个结构体,用例满足某个外部依赖的接口 interface{}• mock 对象能动态调整外部依赖的返回结果,• mock 技术一般通过把外部依赖 interface 化来实现,interface

    1.6K20

    什么是代码覆盖率

    不知道写过接口自动化case的朋友们,有没有思考过一个问题。假如我写了很多接口自动化case,已经把被测系统的所有接口都覆盖到,那这是不是就说明我的自动化case已经全部写完了?...它在保证测试质量的时候潜在保证实际产品的质量,可以基于此在程序中寻找没有被测试用例测试过的地方,进一步创建新的测试用例来增加覆盖率。...指包含该路径下所有子包的覆盖率结果,不加此参数可能会导致覆盖率结果中只有main文件 # & 让服务进程后台运行,避免启动后马上退出,必须加!!!...在命令末尾,确保为同一路径下的所有子包生成覆盖率二进制文件,但不为导入的包生成覆盖率二进制文件。...,可将out文件转换为html报告进行查看,执行如下命令 go tool cover -html cov.out -o index.html 结束语 代码覆盖率不是灵丹妙药,它只是告诉我们有哪些代码没有被测试用例

    74620

    Go语言核心36讲(Go语言实战与应用一)--学习笔记

    23 | 测试的基本规则和流程 (上) 在接下来的日子里,我将带你去学习在 Go 语言编程进阶的道路上,必须掌握的附加知识,比如:Go 程序测试、程序监测,以及 Go 语言标准库中各种常用代码包的正确用法...利用这些 API 和工具,我们可以创建测试源码文件,并为命令源码文件和库源码文件中的程序实体,编写测试用例。...在 Go 语言中,一个测试用例往往会由一个或多个测试函数来代表,不过在大多数情况下,每个测试用例仅用一个测试函数就足够了。...在准备工作顺利完成之后,go test命令就会针对每个被测代码包,依次地进行构建、执行包中符合要求的测试函数,清理临时文件,打印测试结果。这就是通常情况下的主要测试流程。 请注意上述的“依次”二字。...对于每个被测代码包,go test命令会串行地执行测试流程中的每个步骤。

    61521

    如何写好 GO 语言单元测试

    GO 语言本身没有提供assert 包,不过有很多开源的选择。比如使用https://github.com/stretchr/testify,上面的例子可以简化为: ?...毕竟我们的UT 不仅会跑在自己的开发机上,也会跑在一些沙盒容器里,我们可无法知道这些沙盒容器一定能访问到这个公有云服务。如果访问受限,那么测试用例就会失败。...要让我们的测试用例在任何情况下都能成功运行,写一个 mock 服务会是更好的选择。...这样隔离的原因是所有的测试用例会并发执行,我们不希望我们的用例由于试图在同一时间访问同一个文件而互相影响 。 面向接口编程 这是典型的测试倒逼功能代码。...4、箭头式的代码,提升了圈复杂度,也降低了可测性 5、将内部逻辑与外部请求分开测试(small测试) 6、函数太复杂,没有拆分到位,让单个函数功能行为单一且简单 7、大量使用成员方法和函数,不利于传参进行测试

    2.1K20

    go 单元测试基本篇

    利用go自带框架,最简单的单测代码即可如下: 然后在同目录下输入命令 $go test -v XXX_test.go 其中,-v选项可用于打印每个测试函数的名字和运行时间。...从这个示例中可以看到,testing包提供了Logf和Error等方法来帮助提高测试效率,如果是Error方法的分支被执行了,则这组测试示例会失败,Logf则是在标准输出上输出log信息。...要覆盖被测模块中更多的代码,则需要更多的参数组(测试用例)。实现这个最简单的方法就是多写几个TestXXX,go语言提供了表格驱动的测试方式,把所有测试数据合并到了一个测试中的表格中再集中测试。...go语言中所谓的表格驱动,就是把输入和预期输出做成一个表格,很容易向表格添加新的测试数据,并且后面的测试逻辑也没有冗余,这样我们可以有更多的精力地完善错误信息,比如上例中单元测试是写成类似形式: tests...如果代码中并没有自带http请求,那么测试的时候就需要自己编写代码去构造http请求,。

    4.6K00

    如何编写可测试的代码:两个核心三个思路

    造成这种认知的本质问题主要有两点,除了在意识上没有真正认同单元测试的价值外,更多的还是因为实践中发现编写单元测试太耗时,经常要花费很多时间去设计测试用例,而且为了让被测函数跑起来,需要花费大量时间去为它创建运行环境...不过实际工作中,大部分同学在设计阶段并没有 For Test 的意识,自然而然就会写出一些很难测试的代码。...init 在 Go 中其实是一个争议很大特性,很多人都反对用它,甚至有人向 Go2 提 proposal 想删掉 init(当然这是不现实的)。...主要原因就是,如果一个包中有 init 函数,它会在 main 开始执行前就执行(也会在我们的单测函数运行前运行)。...但是这其实会影响我们单测的运行。单测运行时不依赖真实环境,但是由于 init 的特性,如果真的某个 init 函数导致 panic,我们很可能都没办法跑单测。

    62741
    领券