登录
首页 >  Golang >  Go问答

使用 GoDog 测试框架来增强断言库

来源:stackoverflow

时间:2024-02-25 17:27:24 438浏览 收藏

大家好,我们又见面了啊~本文《使用 GoDog 测试框架来增强断言库》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我使用 Cucumber GoDog 作为 gRPC 微服务测试的 BDD 测试框架。 GoDog 不附带任何断言助手或实用程序。

这里有人有采用任何现有断言库(例如 Testify/GoMega 和 GoDog)的经验吗?

据我所知,GoDog 不能在 go test 之上工作,这就是为什么我认为采用我提到的任何基于 go test 的断言库是具有挑战性的。但我仍然想在这里检查一下是否有人有这样做的经验。


解决方案


很遗憾看到您仍在处理此问题。

正如我们之前聊过的,有一种方法可以通过我之前发送给您的 the link 让它工作,这不一定是您在 slack 中提到的适合初学者的设置。也许这是我们贡献者将来可以考虑的事情,只是目前还没有设置,而且由于我们主要是志愿者,因此为新功能设置时间表可能很困难。

我目前的建议是通过 if 语句进行断言。如果您不想在测试代码中专门使用它们,那么您可以创建一个快速包装函数并以这种方式调用它们。

以下是使用 testify 的基本概念验证:

package bdd
import (
    "fmt"
    "github.com/cucumber/godog"
    "github.com/stretchr/testify/assert"
)
type scenario struct{}
func (_ *scenario) assert(a assertion, expected, actual interface{}, msgandargs ...interface{}) error {
    var t asserter
    a(&t, expected, actual, msgandargs...)
    return t.err
}
func (sc *scenario) forcedfailure() error {
    return sc.assert(assert.equal, 1, 2)
}
type assertion func(t assert.testingt, expected, actual interface{}, msgandargs ...interface{}) bool
type asserter struct {
    err error
}
func (a *asserter) errorf(format string, args ...interface{}) {
    a.err = fmt.errorf(format, args...)
}
func featurecontext(s *godog.suite) {
    var sc scenario
    s.step("^forced failure$", sc.forcedfailure)
}
Feature: forced failure
  Scenario: fail
    Then forced failure

这里的关键是实现 testify 的 assert.testingt 接口。

本篇关于《使用 GoDog 测试框架来增强断言库》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>