private static DialogflowNLUTestClient CreateTestClient(DetectIntentResponse response, Action <DetectIntentRequest> callback = null)
        {
            var mockCallInvoker = new Mock <CallInvoker>();

            mockCallInvoker
            .Setup(invoker => invoker.AsyncUnaryCall(
                       It.Is <Method <DetectIntentRequest, DetectIntentResponse> >(method => method.Name == "DetectIntent"),
                       It.IsAny <string>(),
                       It.IsAny <CallOptions>(),
                       It.IsAny <DetectIntentRequest>()))
            .Returns(new AsyncUnaryCall <DetectIntentResponse>(
                         Task.FromResult(response),
                         Task.FromResult(default(Metadata)),
                         () => Status.DefaultSuccess,
                         () => default(Metadata),
                         () => { }))
            .Callback((
                          Method <DetectIntentRequest, DetectIntentResponse> method,
                          string host,
                          CallOptions callOptions,
                          DetectIntentRequest request) =>
                      callback?.Invoke(request));

            var sessionsClient = new SessionsClientBuilder
            {
                CallInvoker = mockCallInvoker.Object
            }
            .Build();

            var configuration = new ConfigurationBuilder()
                                .AddInMemoryCollection(new Dictionary <string, string>
            {
                { "dialogflowProjectId", Guid.NewGuid().ToString() },
            })
                                .Build();

            return(new DialogflowNLUTestClient(sessionsClient, configuration));
        }