3 回答

TA贡献1803条经验 获得超3个赞
我发现在步骤中使用方法而不是函数来获得好运。然后,将状态放入结构中。
func FeatureContext(s *godog.Suite) {
t := NewTestRunner()
s.Step(`^I work with "([^"]*)" entities`, t.iWorkWithEntities)
}
type TestRunner struct {
State map[string]interface{}
}
func (t *TestRunner) iWorkWithEntities(s string) error {
t.State["entities"] = s
...
}

TA贡献1911条经验 获得超7个赞
Godog 目前没有这样的功能,但我过去所做的一般(需要测试并发性)是创建一个 TestContext 结构来存储数据并在每个场景之前创建一个新的.
func FeatureContext(s *godog.Suite) {
config := config.NewConfig()
context := NewTestContext(config)
t := &tester{
TestContext: context,
}
s.BeforeScenario(func(interface{}) {
// reset context between scenarios to avoid
// cross contamination of data
context = NewTestContext(config)
})
}
我在这里也有一个旧示例的链接:https ://github.com/jaysonesmith/godog-baseline-example

TA贡献1799条经验 获得超8个赞
最新版本 (v0.12.0+)godog允许context.Context挂钩和步骤之间的链接。
您可以将其context.Context作为步骤定义参数并返回,测试运行器将提供上一步的上下文作为输入,并使用返回的上下文传递给下一个钩子和步骤。
func iEat(ctx context.Context, arg1 int) context.Context {
if v, ok := ctx.Value(eatKey{}).int; ok {
// Eat v from context.
}
// Eat arg1.
return context.WithValue(ctx, eatKey{}, 0)
}
其他信息和示例:https ://github.com/cucumber/godog/blob/main/release-notes/v0.12.0.md#contextualized-hooks 。
- 3 回答
- 0 关注
- 138 浏览
添加回答
举报