golang测试断言库go-testpredicate提供丰富的诊断输出功能
Golang测试断言库go-testpredicate提供丰富的诊断输出功能
go-testpredicate是一个测试断言风格的库,提供了丰富的诊断输出功能,可以与Go内置的testing
包配合使用,减少调试失败测试的需求。
主要特性
- 提供基本测试:nil、true、false
- 支持任意类型值的相等性比较
- 支持数值、字符串和序列的有序比较
- 支持字符串的正则表达式匹配
- 支持字符串和序列的子序列匹配
- 支持无序集合的条件判断
- 支持代码片段执行的panic条件判断
安装
go get github.com/maargenton/go-testpredicate
使用示例
package example_test
import (
"testing"
"github.com/maargenton/go-testpredicate/pkg/bdd"
"github.com/maargenton/go-testpredicate/pkg/require"
"github.com/maargenton/go-testpredicate/pkg/verify"
)
func TestExample(t *testing.T) {
bdd.Given(t, "something", func(t *bdd.T) {
require.That(t, 123).ToString().Length().Eq(3)
t.When("doing something", func(t *bdd.T) {
t.Then("something happens ", func(t *bdd.T) {
verify.That(t, "123").Eq(123)
verify.That(t, 123).ToString().Length().Eq(4)
})
})
})
}
诊断输出示例
当测试失败时,会输出详细的诊断信息:
--- FAIL: TestExample (0.00s)
--- FAIL: TestExample/Given_something (0.00s)
--- FAIL: TestExample/Given_something/when_doing_something (0.00s)
--- FAIL: TestExample/Given_something/when_doing_something/then_something_happens_ (0.00s)
example_test.go:17:
expected: value == 123
error: values of type 'string' and 'int' are never equal
value: "123"
example_test.go:18:
expected: length(value.String()) == 4
value: 123
string: "123"
length: 3
断言API示例
func TestCompareAPI(t *testing.T) {
verify.That(t, true).IsTrue()
verify.That(t, false).IsFalse()
verify.That(t, nil).IsNil()
verify.That(t, &struct{}{}).IsNotNil()
verify.That(t, 123).IsEqualTo(123)
verify.That(t, 123).IsNotEqualTo(124)
verify.That(t, 123).Eq(123)
verify.That(t, 123).Ne(124)
}
func TestErrorAPI(t *testing.T) {
var sentinel = fmt.Errorf("sentinel")
var err = fmt.Errorf("error: %w", sentinel)
var re = regexp.MustCompile("^error: sentinel$")
verify.That(t, nil).IsError(nil) // No error
verify.That(t, err).IsError("") // Any error
verify.That(t, err).IsError(sentinel) // Specific error or nested error
verify.That(t, err).IsError("sentinel") // Message contains string
verify.That(t, err).IsError(re) // Message matches regexp
}
func TestStringAPI(t *testing.T) {
verify.That(t, "123").Matches(`\d+`)
verify.That(t, 123).ToString().Eq("123")
verify.That(t, "aBc").ToLower().Eq("abc")
verify.That(t, "aBc").ToUpper().Eq("ABC")
}
BDD风格测试
func TestBDDStyle(t *testing.T) {
bdd.Given(t, "something", func(t *bdd.T) {
t.When("doing something", func(t *bdd.T) {
t.With("something", func(t *bdd.T) {
t.Then("something happens", func(t *bdd.T) {
// 测试代码
})
t.Then("something else happens", func(t *bdd.T) {
// 测试代码
})
})
})
})
}
go-testpredicate提供了丰富的断言功能和详细的诊断输出,可以帮助开发者更高效地编写和维护测试代码。
更多关于golang测试断言库go-testpredicate提供丰富的诊断输出功能的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复