Go的自动化测试

自动化测试,是在预设条件下运行系统或应用程序,评估运行结果,预先条件包括正常条件和异常条件。Go本身提供了一套轻量级的测试框架,相对低级,但不过还是有效的。它依赖一个go test测试命令,和一组按照约定方式编写的测试函数,符合规则的测试代码会在运行测试时被自动识别并执行。但是这些文件是不会被普通的Go编译器编译,所以当将应用部署到生产环境时,它们不会被部署。

测试规则

文件命名与放置规则
  1. 测试源文件名应是_test结尾的go文件,例如:add_test.go
  2. 测试代码和业务代码是分开的,但两者应该位于同一包下;
  3. 测试源文件所在的包应该位于$GOPATH/src目录下;
  4. 测试文件必须导入"testing"包;

在Go中,凡是以_或者.符号作为文件名的首字母时,该文件都会被构建工具忽略掉。以_test.go结尾的测试文件,将会被编译为单独的包,然后将其链接到主测试二进制文件。
go工具还会忽略名为testdata的目录,使其可以保存测试所需的辅助数据。

测试函数命名规则

测试文件包括三种函数:测试函数、基准测试函数和例子函数。测试函数用于测试程序的一些逻辑行为是否正确的函数,在命名时应该以Test为前缀,例如func TestAbcde(t *testing.T)。基准测试用于衡量一些函数的性能,是以Benchmark为函数名前缀的函数,例如func BenchmarkAbcde(b *testing.B)。例子函数用来说明函数(变量,常量等)如何使用,以Example为函数名前缀的函数,例如:

func ExamplePrintln(){
    Println("The output of\nthis example.")
    //Output: The output of
    //this example.
}

go test命令

go test命令会自动测试导入路径命名的包并缓存测试结果,根据测试的结果和预先设定的是否匹配,会返回PASSFAIL。它的用

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Go语言中,可以使用gomock和gostub工具来进行自动化的接口测试。通过使用这些工具,可以模拟接口的行为,并且对接口进行打桩。gomock工具提供了一种简单的方式来创建和使用模拟对象,从而可以在测试中模拟接口的调用和返回值。而gostub工具则可以用来在测试中替换接口的方法体,以便测试特定的场景。 使用gomock和gostub进行接口测试的一般步骤如下: 1. 在测试文件中导入gomock或gostub的相关包。 2. 使用gomock生成接口的模拟对象,并设置模拟对象的预期调用及返回值。 3. 使用gostub对接口的方法进行打桩,以模拟不同的场景。 4. 编写测试用例,调用被测试的函数,并断言返回值是否符合预期。 下面是一个示例代码,演示了如何使用gomock和gostub进行接口测试: ```go package main import ( "testing" "github.com/golang/mock/gomock" ) // 定义一个接口 type DB interface { Get(key string) (string, error) } // 被测试的函数 func GetFromDB(db DB, key string) (string, error) { return db.Get(key) } func TestGetFromDB(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() // 创建一个模拟对象 mockDB := NewMockDB(ctrl) // 设置模拟对象的预期调用及返回值 mockDB.EXPECT().Get("key1").Return("value1", nil) // 打桩,模拟不同的场景 gostub.StubFunc(&mockDB.Get, func(key string) (string, error) { if key == "key2" { return "value2", nil } return "", fmt.Errorf("key not found") }) // 调用被测试的函数 value1, err1 := GetFromDB(mockDB, "key1") value2, err2 := GetFromDB(mockDB, "key2") // 断言返回值是否符合预期 if value1 != "value1" || err1 != nil { t.Errorf("Test case 1 failed") } if value2 != "value2" || err2 != nil { t.Errorf("Test case 2 failed") } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值