【问题标题】:How to test Cadence logger call?如何测试 Cadence 记录器调用?
【发布时间】:2021-05-25 00:49:58
【问题描述】:

一个活动用logger := activity.GetLogger(ctx) 实例化一个记录器。它的类型是*zap.Logger

稍后,活动调用logger.Info("some message", zap.String("someField", some.Field))

如何编写测试以验证 logger 是否以这种方式调用?

我尝试了MockLogger,但没有找到不遇到类型问题的方法。 zap.LoggerMockLogger 是否共享任何共同(但不是太通用)interface

【问题讨论】:

标签: go cadence-workflow


【解决方案1】:

您正在尝试的 MockLogger 位于服务器存储库中,不适用于 golang 客户端。

你应该使用testsuite. NewTestActivityEnvironment 它提供了创建带有选项的测试工作者环境。然后你可以为zapLogger注册一个回调(Hooks)来断言日志(如果你需要断言)。

代码如下:

func Test_Activity_Print_Logger(t *testing.T) {
    testSuite := &testsuite.WorkflowTestSuite{}
    env := testSuite.NewTestActivityEnvironment()

    // you can choose what ever you used in your production code when creating worker with workerOptions. 
    logger, err := zap.NewProduction()
    require.Nil(t, err)

    var outputLogs []string
    logger = logger.WithOptions(zap.Hooks(
        func(entry zapcore.Entry) error {
            outputLogs = append(outputLogs, entry.Message)
            return nil
        },
    ))

    env.SetWorkerOptions(worker.Options{
        Logger: logger,
    })
    env.RegisterActivity(sampleActivity)

    val, err := env.ExecuteActivity(sampleActivity)

    require.Nil(t, err)
    require.True(t, !val.HasValue())
    require.True(t, len(outputLogs)==1)
    require.True(t, outputLogs[0] == "test logging")
}

func sampleActivity(ctx context.Context) error {
    logger := activity.GetLogger(ctx)
    logger.Info("test logging")
    return nil
}

func Test_Activity_Noop_Logger(t *testing.T) {
    testSuite := &testsuite.WorkflowTestSuite{}
    env := testSuite.NewTestActivityEnvironment()
    env.RegisterActivity(sampleActivity)
    val, err := env.ExecuteActivity(sampleActivity)
    require.Nil(t, err)
    require.True(t, !val.HasValue())
}

同时发布PR in the sample repo

【讨论】:

  • 如何设置工作流本身的记录器?
  • 抱歉回复晚了。您不能直接为工作流设置记录器。您只能通过 WorkerOption 提供一个 zap 记录器。并且客户端会将其包装到工作流记录器中,以便记录是确定性的
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 2016-06-22
相关资源
最近更新 更多