登录
首页 >  Golang >  Go问答

如何评估Cadence记录器的调用?

来源:stackoverflow

时间:2024-02-15 19:24:22 353浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《如何评估Cadence记录器的调用?》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

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

随后,该 Activity 调用 logger.Info("some message", zap.String("someField", some.Field))

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

我已经尝试过 MockLogger 但还没有找到一种方法来避免遇到类型问题。 zap.LoggerMockLogger 共享任何公共(但不是太通用)interface 吗?


正确答案


您正在尝试的 mocklogger 在服务器存储库中,而不是用于 golang 客户端。

您应该使用 testsuite。新测试活动环境 它提供了创建带有选项的测试工作环境。然后你可以为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

今天关于《如何评估Cadence记录器的调用?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

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