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 關注
- 130 瀏覽
添加回答
舉報