public async Task LogsTelemetry()
        {
            var telemetryClient = new Mock <IBotTelemetryClient>();

            var recognizer = new MyRecognizerSubclass {
                TelemetryClient = telemetryClient.Object
            };
            var adapter  = new TestAdapter(TestAdapter.CreateConversation("RecognizerLogsTelemetry"));
            var activity = MessageFactory.Text("hi");
            var context  = new TurnContext(adapter, activity);
            var dc       = new DialogContext(new DialogSet(), context, new DialogState());

            var result = await recognizer.RecognizeAsync(dc, activity);

            var actualTelemetryProps = (IDictionary <string, string>)telemetryClient.Invocations[0].Arguments[1];

            Assert.NotNull(result);
            Assert.Equal("hi", actualTelemetryProps["Text"]);
            Assert.Null(actualTelemetryProps["AlteredText"]);
            actualTelemetryProps.TryGetValue("TopIntent", out var intent);
            Assert.True(intent == "myTestIntent");
            Assert.Equal("1.0", actualTelemetryProps["TopIntentScore"]);
            var hasMyTestIntent = actualTelemetryProps["Intents"].Contains("myTestIntent");

            Assert.True(hasMyTestIntent);
            Assert.Equal("{}", actualTelemetryProps["Entities"]);
            Assert.Null(actualTelemetryProps["AdditionalProperties"]);

            telemetryClient.Verify(
                client => client.TrackEvent(
                    "MyRecognizerSubclassResult",
                    It.IsAny <IDictionary <string, string> >(),
                    null),
                Times.Once());
        }
        public async Task LogsTelemetryThrowsArgumentNullExceptionOnNullDialogContext()
        {
            var telemetryClient = new Mock <IBotTelemetryClient>();

            var recognizer = new MyRecognizerSubclass {
                TelemetryClient = telemetryClient.Object
            };
            var activity = MessageFactory.Text("hi");

            await Assert.ThrowsAsync <ArgumentNullException>(() => recognizer.RecognizeAsync(null, activity));
        }