簡體   English   中英

如何對帶有提示的Microsoft Bot對話框進行單元測試

[英]How to unit test a Microsoft bot dialog with a prompt

我正在使用Microsoft Bot Framework,並且試圖對一個對話框進行單元測試(單獨):

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<bool> result)
    {
        bool isSure = await result;
        string response = isSure ? "Awesome" : "Sorry";
        IMessageActivity messageActivity = context.MakeMessage();
        messageActivity.Text = response;
        await context.PostAsync(messageActivity);
        context.Done<object>(null);
    }
}

我想證明,如果IAwaitable結果為true,則返回“ Awesome”,如果為false,則返回“ Sorry”。

PromptDialog是帶有靜態方法Confirm的類

在成功使用moq模擬傳遞給對話框的IMessageActivity和IDialogContext之前,我已經對對話框進行了單元測試。 感覺更復雜,因為我想模擬對話框的狀態。

至今:

    [TestFixture]
public class Tests
{
    private Mock<IDialogContext> _dialogContext;
    private Mock<IMessageActivity> _messageActivity;
    private MyDialog _myDialog;

    [SetUp]
    public void Setup()
    {
        _dialogContext = new Mock<IDialogContext>();
        _messageActivity = new Mock<IMessageActivity>();
        _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"));
    }
}

有沒有人對如何做有任何建議或想法?

BotBuilder GitHub存儲庫中Microsoft.Bot.Sample.Tests項目是了解如何對對話框進行單元測試的一個很好的資源

在那里,您將找到Bot Framework團隊進行單元測試的方式。 EchoBotTests是最簡單的開始。 它顯示了如何使用模擬的連接器工廠向機器人發送消息並獲得對它的響應。

關鍵是從DialogTestBase繼承,該對話框提供了非常有用的幫助程序方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM