在 Go 中使用断言
本篇文章介绍了 assert 在 GoLang 中的使用。
在 Go 语言中使用断言
GoLang 不提供对断言的任何内置支持,但我们可以使用来自 Testify API 的广泛使用的第三方包断言。 assert包是用来测试GoLang代码的,就像其他语言的assert方法一样。
assert 包提供了用于测试 Go 系统的综合工具。 它为不同的测试类型提供了多种方法; 您可以在此处找到有关断言方法的信息。
在使用断言包之前,我们必须下载并加载它。 按照以下步骤获取断言包:
- 以管理员身份打开命令提示符。
-
转到您的 Go 项目的目录。
- 确保没有 go.mod 文件。 如果目录中有go.mod文件,则将其删除,然后进行下一步。
-
现在为断言包初始化一个 go.mod 文件并运行以下命令:
go mod init github.com/stretchr/testify/assert
-
现在下载并安装断言包。 运行以下命令:
go get github.com/stretchr/testify/assert
-
上面的代码会拉取assert包,但可能还需要其他依赖。 运行以下命令以下载所有其他依赖项:
go mod download
下载并安装包后,我们就可以运行测试了。 让我们尝试一个例子:
package main
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestAssert(t *testing.T) {
assert := assert.New(t)
var Demo1 string = "Hello, This is jiyik.com!"
var Demo2 string = "Hello, This is jiyik.com!"
assert.Equal(Demo1, Demo2, "Both strings should be equal")
}
上面的代码将测试两个字符串是否相等。 如果字符串相等,则测试通过; 否则,失败。
查看输出:
=== RUN TestAssert
--- PASS: TestAssert (0.00s)
PASS
以上输出表明测试通过。 但是,如果测试失败怎么办?
让我们尝试一个断言测试将失败的例子:
package main
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestAssert(t *testing.T) {
assert := assert.New(t)
var Demo1 string = "Hello, This is jiyik.com!"
var Demo2 string = "Hello, This is jiyik"
assert.Equal(Demo1, Demo2, "Both strings should be equal")
}
如我们所见,两个字符串现在不相等,因此测试应该失败。 查看输出:
RUN TestAssert
prog.go:15:
Error Trace: /prog.go:15
Error: Not equal:
expected: "Hello, This is jiyik.com!"
actual : "Hello, This is jiyik"
Diff:
--- Expected
+++ Actual
@@ -1 +1 @@
-Hello, This is jiyik.com!
+Hello, This is jiyik
Test: TestAssert
Messages: Both strings should be equal
--- FAIL: TestAssert (0.00s)
FAIL
Program exited.
正如我们所见,测试现在失败了,程序显示了有关测试的完整信息。 像equal这样的方法有很多,可以和assert一起使用来运行不同的测试。
让我们尝试 assert.Nil 和 assert.NotNil 方法的示例:
package main
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestAssert(t *testing.T) {
var demo = []string{
"jiyik.123@hotmail.com",
"Jiyik <demo@jiyik.com>",
"demo@jiyik.tv",
"demohotmail.com",
"demo@"}
// assert for nil
assert.Nil(t, demo)
}
上面的代码将检查给定的值对象——如果它是 nil。 查看输出:
=== RUN TestAssert
prog.go:19:
Error Trace: /prog.go:19
Error: Expected nil, but got: []string{"jiyik.123@hotmail.com", "Jiyik <demo@jiyik.com>", "demo@jiyik.tv", "demohotmail.com", "demo@"}
Test: TestAssert
--- FAIL: TestAssert (0.00s)
FAIL
Program exited.
相似地,
package main
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestAssert(t *testing.T) {
var demo = []string{
"jiyik.123@hotmail.com",
"Jiyik <demo@163.com>",
"demo@jiyik.tv",
"demohotmail.com",
"demo@"}
// assert for not nil
assert.NotNil(t, demo)
}
上面的代码将测试 not nil 对象或值。 查看输出:
=== RUN TestAssert
--- PASS: TestAssert (0.00s)
PASS
Program exited.
相关文章
在 Golang 中使用 If-Else 和 Switch Loop Inside HTML 模板
发布时间:2023/04/27 浏览次数:65 分类:Go
-
本篇文章介绍了在 Golang 的 HTML 模板中使用 if-else 和 switch 循环。因此,只要输出是 HTML,就应该始终使用 HTML 模板包而不是文本模板。
Golang 中的零值 Nil
发布时间:2023/04/27 浏览次数:166 分类:Go
-
本篇文章介绍 nil 在 Golang 中的含义,nil 是 Go 编程语言中的零值,是众所周知且重要的预定义标识符。
Golang 中的 Lambda 表达式
发布时间:2023/04/27 浏览次数:93 分类:Go
-
本篇文章介绍如何在 Golang 中创建 lambda 表达式。Lambda 表达式似乎不存在于 Golang 中。 函数文字、lambda 函数或闭包是匿名函数的另一个名称。
在 Go 中捕获 Panics
发布时间:2023/04/27 浏览次数:66 分类:Go
-
像错误一样,Panic 发生在运行时。 换句话说,当您的 Go 程序中出现意外情况导致执行终止时,就会发生 Panics。让我们看一些例子来捕捉 Golang 中的Panics。
Go 中的随机数生成
发布时间:2023/04/27 浏览次数:114 分类:Go
-
本篇文章介绍如何在 Go 语言中使用随机数生成功能。Go 中的随机数生成 Go 语言为随机数生成功能提供内置支持。 内置包 math 有方法 rand(),用于随机数生成。