0

我正在为时间工作流编写集成测试并使用 golang sdk。我的工作流程有一个活动,其中包括以下代码:

   stackEnv, ok := ctx.Value("stackEnv").(*StackEnv)
    if !ok {
        return nil, errors.New("stackEnv not configured")
    }

在我的测试中,我创建了一个TestWorkflowEnvironment并使用s.env.ExecuteWorkflow(EntityCreateWorkflow, wfParams). 但是,我在测试中遇到错误,stackEnv not configured因为context.Context在测试环境中运行的活动没有stackEnv设置。如何为我的 指定自定义上下文TestWorkflowEnvironment

4

2 回答 2

1

使用TestWorkflowEnvironment.SetWorkerOptions()API。

在生产代码中,上下文参数在执行工作流的工作人员上指定,例如:

    ctx := context.WithValue(context.Background(), "stackEnv", stackEnv)

    worker.New(stackEnv.Temporal, string(taskQueueName), worker.Options{
        BackgroundActivityContext: ctx,
    })

在 中WorkflowTestEnvironment,模拟了一个工人。我们可以用 指定选项SetWorkerOptions(),例如:

    ctx := context.WithValue(context.Background(), "stackEnv", StackEnv)

    s.env.SetWorkerOptions(worker.Options{
        BackgroundActivityContext: ctx,
    })

s.env时间在哪里testsuite.TestWorkflowEnvironment

于 2021-10-14T21:25:36.733 回答
1

帕特里克的回答是绝对正确的。

我还建议研究作为结构成员的实施活动。通过这种方式将依赖项传递给它们不需要弄乱上下文。

请参阅使用此技术的问候示例。

于 2021-10-17T20:35:58.763 回答