Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有对话框的情况下对bot进行单元测试?(c#)_C#_Unit Testing_Botframework_Bots - Fatal编程技术网

如何在没有对话框的情况下对bot进行单元测试?(c#)

如何在没有对话框的情况下对bot进行单元测试?(c#),c#,unit-testing,botframework,bots,C#,Unit Testing,Botframework,Bots,我目前正在Microsoft Bot Framework 4中进行自动单元测试。 从这里,我想检查来自bot的简单对话语句。在CoreBot中 测试样本() 演示了如何做到这一点,但对我来说,我的机器人不使用对话框(据我所知) 我现在的问题是,如何对简单的问答语句进行单元测试我的主要目标是对我的QnA Maker知识库进行单元测试。 //版权所有(c)微软公司。版权所有。 //根据麻省理工学院许可证授权。 使用System.Linq; 使用系统线程; 使用System.Threading.Tas

我目前正在Microsoft Bot Framework 4中进行自动单元测试。 从这里,我想检查来自bot的简单对话语句。在CoreBot中 测试样本() 演示了如何做到这一点,但对我来说,我的机器人不使用对话框(据我所知)

我现在的问题是,如何对简单的问答语句进行单元测试我的主要目标是对我的QnA Maker知识库进行单元测试。

//版权所有(c)微软公司。版权所有。
//根据麻省理工学院许可证授权。
使用System.Linq;
使用系统线程;
使用System.Threading.Tasks;
使用Microsoft.Bot.Builder;
使用Microsoft.Bot.Schema;
使用Microsoft.Extensions.Logging;
使用制度;
使用Newtonsoft.Json;
使用System.IO;
使用Microsoft.Bot.Builder.AI.QnA;
使用Microsoft.Extensions.Configuration;
名称空间SEKAI.Bots
{
公共类DispatchBot:ActivityHandler
{
私人ILogger_记录器;
私有IBotServices(网络服务);;
专用IConfiguration\u配置;
公共调度机器人(IConfiguration配置、IBotServices机器人服务、ILogger记录器)
{
_配置=配置;
_记录器=记录器;
_机器人服务=机器人服务;
}
受保护的异步任务NoMatchFound(ITurnContext turnContext、CancellationToken CancellationToken)
{
var table=BotUtility.BotUtility.GetTableReference(_配置);
BotUtility.BotUtility.InsertRecord(turnContext,表);
//沃德·奥斯盖夫特,温·基恩知识库·格芬登·沃德
System.Diagnostics.Debug.WriteLine(“FINDE KEINE PASSENDE ANTWORT”);
Wait turnContext.SendActivityAsync(MessageFactory.Text(“Leider kann ich Ihnen hierbei noch nich weiterhelfen.ich bin aber schon dabei,Neues zu lernen!”),取消令牌);
}
//贝努策之家聊天室
受保护的重写异步任务OneEventActivityAsync(ITurnContext turnContext、CancellationToken CancellationToken)
{
如果(turnContext.Activity.Name==“webchat/join”)
{
字符串WelcomeCardpath=Path.Combine(“.”、“AdaptiveCards”、“WelcomeCard.json”);
var cardAttachment=BotUtility.BotUtility.CreateAdaptiveCard(WelcomeCardpath);
Wait turnContext.SendActivityAsync(MessageFactory.Attachment(cardAttachment),cancellationToken);
}
}
//我是纳克里赫特·施赖特
受保护的重写异步任务OnMessageActivityAsync(ITurnContext turnContext,CancellationToken CancellationToken)
{
//首先,我们使用分派模型来确定使用哪种认知服务(LUIS或QnA)。
var recognizerResult=wait _botServices.Dispatch.RecognizeAsync(turnContext,cancellationToken);
//Top intent告诉我们使用哪种认知服务。
var topIntent=recognizerResult.getTopScoringContent();
//接下来,我们调用具有最高意图的调度程序。
等待DispatchToTopIntentAsync(turnContext、topIntent.intent、识别器结果、取消令牌);
}
//如此丰富的知识库
专用异步任务DispatchToTopIntentAsync(iTurContext turnContext、字符串意图、识别器结果识别器结果、取消令牌取消令牌)
{
开关(意图)
{
案例“q_SEKAI_chat”:
等待进程sekai_ChitchatAsync(turnContext,cancellationToken);
打破
违约:
//沃德·奥斯盖夫特,温·基恩知识库·格芬登·沃德
_logger.LogInformation($“分派未识别的意图:{intent}.”);
等待NoMatchFound(turnContext、cancellationToken);
打破
}
}
//比尔贝东和塞卡伊闲聊
专用异步任务进程sekai_ChitchatAsync(iTurContext turnContext,CancellationToken CancellationToken)
{
_logger.LogInformation(“ProcessSEKAI_ChitchatAsync”);
//信心评分zur知识库
var metadata=新元数据();
var qnaOptions=新的QnAMakerOptions();
qnaOptions.ScoreThreshold=0.70F;
//知识库中的蚂蚁草
var results=await_botServices.SEKAI_Chitchat.GetAnswersAsync(turnContext,qnaOptions);
if(results.Any())
{
//紫荆花植物知识库
字符串savetext=results.First().Answer;
System.Diagnostics.Debug.WriteLine(保存文本);
if(savetext.Contains(“{card}”))
{
//这是一个很好的选择
int firstKeyword=savetext.IndexOf(“{card}”)+“{card}”.Length;
int lastKeyword=savetext.LastIndexOf(“{/card}”);
string subsavetext=savetext.Substring(firstKeyword,lastKeyword-firstKeyword);
系统。诊断。调试。写入线(子存储文本);
//自适应卡
savetext=savetext.Replace(“{card}”+子savetext+“{/card}”,”);
字符串AdaptiveCardPath=Path.Combine(“.”、“AdaptiveCards”、subsavetext+“.json”);
var cardAttachment=BotUtility.BotUtility.CreateAdaptiveCard(AdaptiveCardPath);
Wait turnContext.SendActivityAsync(MessageFactory.Attachment(cardAttachment),cancellationToken);
//Ausgabe von Text
Wait turnContext.SendActivityAsync(MessageFactory.Text(savetext),cancellationToken);
}
其他的