diff --git a/client/mock/mock.go b/client/mock/mock.go index 4a1e520e74..9a0fd61d62 100644 --- a/client/mock/mock.go +++ b/client/mock/mock.go @@ -80,8 +80,12 @@ func (m *MockClient) Call(ctx context.Context, req client.Request, rsp interface if t := reflect.TypeOf(rsp); t.Kind() == reflect.Ptr { v = reflect.Indirect(v) } + response := r.Response + if t := reflect.TypeOf(r.Response); t.Kind() == reflect.Func { + response = reflect.ValueOf(r.Response).Call([]reflect.Value{})[0].Interface() + } - v.Set(reflect.ValueOf(r.Response)) + v.Set(reflect.ValueOf(response)) return nil } diff --git a/client/mock/mock_test.go b/client/mock/mock_test.go index a13cef1327..984b3351db 100644 --- a/client/mock/mock_test.go +++ b/client/mock/mock_test.go @@ -16,6 +16,8 @@ func TestClient(t *testing.T) { {Method: "Foo.Bar", Response: map[string]interface{}{"foo": "bar"}}, {Method: "Foo.Struct", Response: &TestResponse{Param: "aparam"}}, {Method: "Foo.Fail", Error: errors.InternalServerError("go.mock", "failed")}, + {Method: "Foo.Func", Response: func() string {return "string"}}, + {Method: "Foo.FuncStruct", Response: func() *TestResponse {return &TestResponse{Param: "aparam"}}}, } c := NewClient(Response("go.mock", response))