Microsoft Bot Framework单元测试不会继续出现对话框

时间:2019-07-29 18:39:49

标签: botframework nunit-3.0

我有一个MSFT Bot Framework应用程序,正在尝试为其编写单元测试。我的单个呼叫/响应测试工作正常,但是任何需要继续对话的操作都不起作用。每次创建的DialogContext中的ActiveDialog属性始终为null,而Stack属性始终为空。我有点关注这个blog post example。我缺少什么让机器人在转弯之间保持其状态?

一次性设置

        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();
        }

0 个答案:

没有答案