如何使用提示unit testingMicrosoft bot对话框

我正在使用Microsofts Bot Framework,我正在尝试单独测试(单独)我拥有的Dialog:

public class MyDialog : IDialog { public async Task StartAsync(IDialogContext context) { PromptDialog.Confirm(context, MessageReceived, "Are you sure?", "Sorry what was that?"); } private async Task MessageReceived(IDialogContext context, IAwaitable result) { bool isSure = await result; string response = isSure ? "Awesome" : "Sorry"; IMessageActivity messageActivity = context.MakeMessage(); messageActivity.Text = response; await context.PostAsync(messageActivity); context.Done(null); } } 

我想certificate,如果IAwaitable结果是真实的,它回复“Awesome”,如果它的错误是“抱歉”。

PromptDialog是一个静态方法确认的类

在成功使用moq模拟传递给对话框的IMessageActivity和IDialogContext之前,我有unit testing对话框。 这感觉更复杂,因为我想模仿对话框的状态。

至今:

  [TestFixture] public class Tests { private Mock _dialogContext; private Mock _messageActivity; private MyDialog _myDialog; [SetUp] public void Setup() { _dialogContext = new Mock(); _messageActivity = new Mock(); _messageActivity.SetupAllProperties(); _dialogContext.SetupSequence(x => x.MakeMessage()) .Returns(_messageActivity.Object); _myDialog = new MyDialog(); } [Test] public void GivenTrue_WhenIConfirmPrompt_ThenAwesome() { _myDialog .StartAsync(_dialogContext.Object) .Wait(CancellationToken.None); Assert.That(_messageActivity.Object.Text, Is.EqualTo("Awesome")); } [Test] public void GivenTrue_WhenIRejectPrompt_ThenSorry() { _myDialog .StartAsync(_dialogContext.Object) .Wait(CancellationToken.None); Assert.That(_messageActivity.Object.Text, Is.EqualTo("Sorry")); } } 

有没有人有任何建议或想法如何做到这一点?

理解如何unit testing对话框的一个很好的来源是来自BotBuilder GitHub存储库的Microsoft.Bot.Sample.Tests项目。

在那里,您将找到Bot Framework团队进行unit testing的方式。 EchoBotTests是最容易开始的。 它显示了如何使用模拟连接器工厂向机器人发送消息并获取响应。

关键是inheritanceDialogTestBase ,它提供了非常有用的帮助方法。