Como testar a unidade de um diálogo de bot da Microsoft com um prompt

Estou usando o Microsofts Bot Framework e estou tentando testar unitariamente (isoladamente) uma caixa de diálogo que possuo:

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

Quero provar que, se o resultado IAwaitable for verdadeiro, ele responderá com "Awesome" e, se falso, será "Sorry".

PromptDialog é uma classe com um método estáticoconfirme

Eu tenho caixas de diálogo testadas antes de usar o moq para simular o IMessageActivity e o IDialogContext que são passados para o diálogo. Isso parece mais complicado porque quero zombar de um estado da caixa de diálogo.

Tão longe:

    [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"));
    }
}

Alguém tem alguma sugestão ou idéia de como fazer isso?

questionAnswers(1)

yourAnswerToTheQuestion