You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何单元测试MS Bot Framework对话框?遇Conversation.SendAsync访问问题

解决MS Bot Framework对话框单元测试的新方法

确实,你提到的Conversation.SendAsync现在是框架内部方法,外部无法调用,不过Bot Framework已经提供了公开的官方测试工具来替代,下面是两种常用的解决方案:

1. 使用TestAdapter测试整个Bot逻辑

TestAdapter是Bot Builder Testing库提供的工具,可以模拟用户和Bot的交互,适合测试完整的Bot处理流程:

步骤:

  • 首先安装NuGet包:Microsoft.Bot.Builder.Testing
  • 编写测试代码示例:
using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.Testing;
using Xunit;

public class YourBotTests
{
    [Fact]
    public async Task TestBotResponse()
    {
        // 初始化你的Bot实例
        var bot = new YourBot();
        // 创建TestAdapter
        var adapter = new TestAdapter();

        // 模拟用户发送消息,触发Bot的OnTurn逻辑
        await adapter.SendTextToBotAsync("Hello", async (turnContext, cancellationToken) =>
        {
            await bot.OnTurnAsync(turnContext, cancellationToken);
        });

        // 获取Bot的回复并验证
        var reply = await adapter.GetNextReplyAsync();
        Assert.Equal("你好!这是测试回复", reply.Text);
    }
}

2. 使用DialogTestClient专门测试对话框

如果只需要测试单个对话框的逻辑,DialogTestClient是更针对性的选择,它可以直接和对话框交互,无需完整Bot实例:

步骤:

  • 同样需要安装Microsoft.Bot.Builder.Testing NuGet包
  • 编写测试代码示例:
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.Testing.Dialogs;
using Xunit;

public class YourDialogTests
{
    [Fact]
    public async Task TestDialogFlow()
    {
        // 初始化你要测试的对话框
        var testDialog = new YourSampleDialog();
        // 创建DialogTestClient,指定测试通道和目标对话框
        var client = new DialogTestClient("test", testDialog);

        // 发送第一条用户消息
        var firstReply = await client.SendActivityAsync<IMessageActivity>("启动对话框");
        Assert.Equal("欢迎进入测试对话框,请输入你的名字", firstReply.Text);

        // 发送后续消息,模拟多轮对话
        var secondReply = await client.SendActivityAsync<IMessageActivity>("Kevin");
        Assert.Equal("你好,Kevin!对话框测试完成", secondReply.Text);

        // 验证对话框是否结束
        Assert.Equal(DialogTurnStatus.Complete, client.DialogTurnResult.Status);
    }
}

额外注意事项

  • 确保你的对话框继承自ComponentDialog或Dialog基类,这样才能被DialogTestClient正确处理
  • 如果你的Bot使用了依赖注入,测试时需要手动初始化必要的服务(比如MemoryStorage、ConversationState等)
  • 可以通过client.DialogTurnResult.Result获取对话框返回的最终结果,用于验证业务逻辑

内容的提问来源于stack exchange,提问作者Kevin D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:04:17