模拟单元测试中从main调用的函数返回值

问题描述

main.go中,我有一些代码可以通过网络调用AWS Secrets Manager。

func main() {
    secretName := os.Getenv("DYNAMO_SECRET")
    credentials,err := getSecret(secretName)
    if err != nil {
        logger.Errorf("Failed to retrieve secret from AWS Secrets manager %+v\n",err)
        panic(err)
    }
    router,err := setupRouter(credentials)

getSecret(secretName)函数在内部对AWS Secrets Manager进行了网络调用。在main的单元测试中,我有以下代码。

func TestMainProgram(t *testing.T) {
    defer mockStartServer(nil)()
    defer mockSetupRouter(mux.NewRouter(),nil)()
    main()
    t.Log("Everything is perfect.")
}

运行单元测试时,我想模拟对AWS Secrets Manager的网络调用。是否可以模拟getSecret(secretName)的返回值?在Java环境中,我正在尝试使用Mockitowhen(functionIsCalled).thenReturn(mockValue)语法做类似的事情。

解决方法

您可以使用函数变量将其设置为其他值进行测试:

information_schema

在测试中,您可以更改func defaultGetSecret(secretName string) (Credentials,error) {...} var getSecret=defaultGetSecret func main() { ... credentials,err:=getSecret(...) } 指向其他内容:

getSecret

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...