您的位置:

GoConvey:让测试更简单的实时测试反馈框架

一、GoConvey 简介

GoConvey 是一个让测试更简单的实时测试反馈框架,它可以让您的测试更加容易编写、理解和组织,同时实时反馈让您在开发过程中节省了很多时间。

GoConvey 在 2013 年首次亮相,作者为 Chris Hines 。GoConvey 提供了一个简单、直观和可扩展的方式来编写测试并将测试结果实时反馈给开发人员。GoConvey 在 Go 语言测试框架中增强了 assertion 清晰度和可组织度,同时也提供了 BDD(行为驱动开发) 的支持。

二、使用 GoConvey

1. 安装

首先,您需要安装 GoConvey。在命令行工具中输入以下指令:

go get github.com/smartystreets/goconvey

2. 编写测试

GoConvey 基于 Go 的测试框架标准,只需要编写具有一些 assert 条件的代码,就可以在 GoConvey 中实时查看测试反馈。在 GoConvey 中,可以运行多个测试类,每个测试类都会显示在浏览器中的左侧导航栏中。这里我们简单介绍一下 GoConvey 的基本测试方法:

func TestAdd(t *testing.T) {
	Convey("Given two numbers", t, func() {
		a := 1
		b := 2

		Convey("When adding the numbers", func() {
			result := a + b
			Convey("The result should be 3", func() {
				So(result, ShouldEqual, 3)
			})
		})
	})
}

这就是 GoConvey 的基本测试方法。使用 Convey 方法编写了一个测试框架。Convey 的第一个参数是测试的名称,第二个参数是测试上下文,第三个参数是要执行的功能代码块。功能代码块中的第一个 Convey 函数表示给出了测试情景的描述(Given)。在这个例子中,它是给定两个数字。第二个 Convey 表示一个动作的执行(When)。在这里,这个动作是将这两个数字加在一起。最后的 Convey 表示对动作的验证(Then)。在这里,验证的结果是两个数字之和应该是 3。

当然,这只是一个简单的例子。更复杂的测试需要更多的代码以实现功能和测试的覆盖度。但是,GoConvey 提供了更复杂测试的实现方法,包括以下不同的测试类型:

  • Convey( "Some full sentence representing functionality", func() { /*...*/ } )
  • Convey( "Some sentence fragment", b )
  • Convey( "Some sentence fragment", func() { c.So(x, c.ShouldEqual, 42) } )

从这些例子中可以看出,GoConvey 支持灵活的测试形式。基本结构足以处理陈述句和条件句,而这些陈述和条件可以实现复杂的测试。

3. 运行测试

运行测试的命令行如下所示:

goconvey

输入命令后,会在浏览器中打开 GoConvey 的运行页面。如果运行成功,所有的测试都会自动运行。如果测试失败,浏览器会给出反馈提示,您可以通过这个反馈信息找到错误。

4. 配置项

GoConvey 支持几种配置选项来修改默认行为,具体见以下代码:

So(true, ShouldBeTrue)
So(false, ShouldBeFalse)
So("Hello, GoConvey!", ShouldNotEqual, "Goodbye, GoConvey!")

这里的示例代码展示了三种不同的测试方法。第一个 So 方法测试了真值;第二个方法测试了假值;第三个测试方法比较两个字符串不相等。每个 So 方法都需要一个测试断言(ShouldBeTrue、ShouldBeFalse 或 ShouldNotEqual),该断言将与给定的值进行比较。如果断言失败,则测试会失败。

三、GoConvey 的优势

1. 实时反馈

GoConvey 可以在测试运行时实时地反馈结果,无需等待测试运行结束。这使得测试编写、调试和组织变得更加容易。

2. 容易看懂和编写

GoConvey 的结构基于自然语言的对话框架,使得测试用例变得容易编写、组织和阅读。同时,GoConvey 与 Go 的测试框架完全一致,所以您已经多少熟悉了一些基本的测试编写语法和结构。

3. 支持 BDD

GoConvey 支持 BDD(行为驱动开发),它利用自然语言的模式描述代码功能和行为。这让测试更加可读性、更容易编写,也让开发人员、测试人员和客户之间的协作变得更加容易。

4. 提供高级功能

GoConvey 提供了一些高级功能,如代码覆盖率、HTML 报告和可视化比较。这些功能都以后端命令行工具或前端浏览器插件的形式提供,在测试开发过程中增加了更多的灵活性和可扩展性。

结语

总之,GoConvey 为 Go 语言的测试框架带来了一些重要的优势,这些优势主要体现在改善测试编写、组织和运行的方面。总的来说,GoConvey 对于开发人员、测试人员和 QA 团队都是非常有用的。使用它可以大大节约时间和精力。

完整的代码示例:

package example

import (
	"testing"

	. "github.com/smartystreets/goconvey/convey"
)

func TestAdd(t *testing.T) {
	Convey("Given two numbers", t, func() {
		a := 1
		b := 2

		Convey("When adding the numbers", func() {
			result := a + b
			Convey("The result should be 3", func() {
				So(result, ShouldEqual, 3)
			})
		})
	})

	Convey("Given a string", t, func() {
		str := "Hello, GoConvey!"

		Convey("When check the string length", func() {
			strLen := len(str)
			Convey("The length should be 15", func() {
				So(strLen, ShouldEqual, 15)
			})
		})

		Convey("When change the string lowercase", func() {
			result := strings.ToLower(str)
			Convey("The result should be \"hello, goconvey!\"", func() {
				So(result, ShouldEqual, "hello, goconvey!")
			})
		})
	})
}