在单元测试中模拟从 main() 调用的函数 return 值
Mocking a function return value called from main() in unit test
在 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)
的 return 值?在 Java 上下文中,我正在尝试使用 Mockito
和 when(functionIsCalled).thenReturn(mockValue)
语法做类似的事情。
您可以使用函数变量将其设置为其他值以进行测试:
func defaultGetSecret(secretName string) (Credentials, error) {...}
var getSecret=defaultGetSecret
func main() {
...
credentials, err:=getSecret(...)
}
在您的测试中,您可以将 getSecret
更改为指向其他内容:
func TestMain(t *testing.T) {
getSecret=func(secretName string) (Credentials,error) {
return mockCredentials,nil
}
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)
的 return 值?在 Java 上下文中,我正在尝试使用 Mockito
和 when(functionIsCalled).thenReturn(mockValue)
语法做类似的事情。
您可以使用函数变量将其设置为其他值以进行测试:
func defaultGetSecret(secretName string) (Credentials, error) {...}
var getSecret=defaultGetSecret
func main() {
...
credentials, err:=getSecret(...)
}
在您的测试中,您可以将 getSecret
更改为指向其他内容:
func TestMain(t *testing.T) {
getSecret=func(secretName string) (Credentials,error) {
return mockCredentials,nil
}
main()
}