Модульные тесты Microsoft Bot Framework не продолжают диалоги

У меня есть приложение MSFT Bot Framework, для которого я пытаюсь писать модульные тесты. У меня есть одиночные тесты вызова / ответа, которые работают нормально, но все, что требует продолжения диалога, не работает. Свойство ActiveDialog в DialogContext, которое создается на каждом этапе, всегда имеет значение NULL, а свойство Stack всегда пусто. Я вроде как следил за этим пример сообщения в блоге. Что мне не хватает, что позволяет боту сохранять свое состояние между ходами?

Одноразовая настройка

        protected virtual void TestFixtureSetup()
        {
            var environmentName = "development";
            var builder = new ConfigurationBuilder();
            var configuration = builder.Build();

            _connectedServices = new BotServices(_botConfig, configuration, environmentName);
            _testAdapter = new TestAdapter();
            _testAdapter.Use(new AutoSaveStateMiddleware());
        }

Настройка для каждого теста

        protected virtual void TestSetup()
        {
            var memStore = new MemoryStorage();
            var userState = new UserState(memStore);
            var conversationState = new ConversationState(memStore);
            var dialogState = conversationState.CreateProperty<DialogState>("dialogState");
            _dialogSet = new DialogSet(dialogState);
            _dialogSet.Add(new MainDialog(_connectedServices, conversationState, userState, new TestTelemetryClient()));

            _testFlow = new TestFlow(_testAdapter, async (turnContext, cancellationToken) =>
            {
                var dc = await _dialogSet.CreateContextAsync(turnContext, cancellationToken);
                await dc.ContinueDialogAsync();
                if (!turnContext.Responded)
                {
                    await dc.BeginDialogAsync(nameof(MainDialog));
                }
            });
        }

Тестовое задание

        public async Task MenuTestMethod(string subMenuOption, string verificationString)
        {
            var firstMenu = Responses.BuildFirstMenu(null, null);
            var secondMenu = Responses.BuildSecondMenu(null, null);
            await _testFlow
                .Send("go to first menu")
                .AssertReply((activity) =>
                {
                    Assert.AreEqual(firstMenu.Attachments[0].Content, activity.AsMessageActivity().Attachments[0].Content);
                })
                .Send("go to second menu")
                .AssertReply((activity) =>
                {
                    Assert.AreEqual(secondMenu.Attachments[0].Content, activity.AsMessageActivity().Attachments[0].Content);
                })
                .Send(subMenuOption)
                .AssertReply((activity) =>
                {
                    Assert.IsTrue(activity.AsMessageActivity().Text.Contains(verificationString));
                })
                .StartTestAsync();
        }

person DevNoob    schedule 29.07.2019    source источник
comment
Я могу помочь тебе с этим. Можете ли вы отредактировать код для тестируемого диалогового окна?   -  person mdrichardson    schedule 06.08.2019
comment
Да ... Я прочитал весь предоставленный вами код и не верю, что проблема в вашем модульном тесте. Было бы здорово, если бы вы могли ссылаться на свое репо. Если нет, включите любой код для вашего диалога, OnTurn, OnMessage, OnDialog и все остальное, что, по вашему мнению, может иметь отношение.   -  person mdrichardson    schedule 06.08.2019
comment
Вам все еще нужна помощь с этим? Если да, укажите свой код, как указано выше. Вы можете увидеть здесь, что модульные тесты с продолжением диалога должны работать.   -  person mdrichardson    schedule 12.08.2019
comment
@ mdrichardson-MSFT Я обнаружил, что это работает для меня, если я не начинаю с MainDialog. Я уверен, что мы здесь что-то делаем не так. К сожалению, я столкнулся с другими проблемами LUIS / диспетчерские, которые более важны. Спасибо, что изучили это!   -  person DevNoob    schedule 13.08.2019
comment
Вы хотите снова поработать над этой проблемой? Не стесняйтесь отправлять свой код через Skype / Teams, если хотите. Я оставлю заявку в службу поддержки открытой, если вы больше не заинтересованы в ее решении в ближайшее время.   -  person mdrichardson    schedule 27.08.2019