Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
C# 如何对要求用户在Bot框架中选择选项的自定义提示进行单元测试_C#_Json_Unit Testing_Botframework_Adaptive Cards - Fatal编程技术网

C# 如何对要求用户在Bot框架中选择选项的自定义提示进行单元测试

C# 如何对要求用户在Bot框架中选择选项的自定义提示进行单元测试,c#,json,unit-testing,botframework,adaptive-cards,C#,Json,Unit Testing,Botframework,Adaptive Cards,我使用自适应卡制作了一些自定义提示,这些提示需要用户输入,如input.ChoiceSet和input.Text 我这里的问题是,如果我有一张有3种选择(“红色”、“蓝色”、“绿色”)的卡,我想测试选择“红色”的结果。如何在测试代码中发送选择并获得结果。 我想在用户点击提交按钮后对结果和流程进行单元测试 我使用JObject以字符串形式获取用户的选择 在dialog类的构造函数中,我已经将提示符添加到对话框中 AddDialog(新的CustomPrompt(“cardPrompt”,Dialo

我使用自适应卡制作了一些自定义提示,这些提示需要用户输入,如input.ChoiceSet和input.Text

我这里的问题是,如果我有一张有3种选择(“红色”、“蓝色”、“绿色”)的卡,我想测试选择“红色”的结果。如何在测试代码中发送选择并获得结果。 我想在用户点击提交按钮后对结果和流程进行单元测试

我使用JObject以字符串形式获取用户的选择

在dialog类的构造函数中,我已经将提示符添加到对话框中

AddDialog(新的CustomPrompt(“cardPrompt”,DialogValidators.AdaptiveCardValidatorAsync));
这是我的测试对话框代码

专用异步任务aStep(WaterWallStepContext stepContext,CancellationToken CancellationToken)
{
var adaptiveActivity=stepContext.Context.Activity.CreateReply();
adaptiveActivity.AddCardAttachment();
return wait stepContext.PromptAsync(
“卡片提示”,
新提示
{
提示=自适应活动,
RetryPrompt=MessageFactory.Text(“xxx”),
Validations=新列表{“selectionCard”}
});
}
专用异步任务bStep(WaterWallStepContext stepContext,CancellationToken CancellationToken)
{
JObject answerObject=(JObject)JsonConvert.DeserializeObject(stepContext.Result.ToString());
字符串userChoice=answerObject[“choiceID”].ToString();
}
下面是我的测试代码

userState=newuserstate(newmemoryStorage());
var subDialog=新的subDialog(userState);
var MainDialog=新建MainDialog(子对话框);
var testClient=新的DialogTestClient(Channels.Msteams,MainDialog);
//这里有一些代码
reply=wait testClient.SendActivityAsync(“红色”);
断言.AreEqual(XXXX,回复….);
如何使用DialogTestClient进行测试

谢谢你抽出时间

更新

下面是我的速成班。它扩展了具有抽象方法(OnPromptAsync和OnRecognitizeAsync)的Prompt2,并扩展了Dialog类


公共类CustomPrompt:Prompt2
{
公共CustomPrompt(字符串对话框ID,PromptValidator validator=null)
:base(对话框ID,验证程序)
{
}
PromptAsync上受保护的异步覆盖任务(ITurnContext turnContext、IDictionary状态、PromptOptions选项、bool isRetry、CancellationToken CancellationToken=default(CancellationToken))
{
如果(turnContext==null)
{
抛出新ArgumentNullException(nameof(turnContext));
}
如果(选项==null)
{
抛出新ArgumentNullException(nameof(options));
}
if(isRetry&&options.RetryPrompt!=null)
{
await turnContext.SendActivityAsync(options.RetryPrompt,cancellationToken).ConfigureAwait(false);
}
else if(options.Prompt!=null)
{
await turnContext.SendActivityAsync(options.Prompt,cancellationToken).ConfigureAwait(false);
}
}
ConrecognizeAsync上的受保护覆盖任务(iTurContext turnContext、IDictionary state、PrompOptions选项、CancellationToken CancellationToken=default(CancellationToken))
{
如果(turnContext==null)
{
抛出新ArgumentNullException(nameof(turnContext));
}
var result=新的PromptRecognizerResult();
if(turnContext.Activity.Type==ActivityTypes.Message)
{
var message=turnContext.Activity.AsMessageActivity();
如果(!string.IsNullOrEmpty(message.Text))
{
result.successed=true;
result.Value=message.Text;
}
/*为自适应卡中的值添加处理*/
else if(message.Value!=null)
{
result.successed=true;
result.Value=message.Value.ToString();
}
}
返回Task.FromResult(结果);
}
}
这是我名片的结构

{
“类型”:“AdaptiveCard”,
“正文”:[
{
“类型”:“容器”,
“项目”:[
{
“类型”:“Input.ChoiceSet”,
“包装”:正确,
“id”:“choiceID”,
“值”:{defaultValue}
“占位符”:“占位符文本”,
“选择”:[
{
标题:“aaaa”,
值:“testChoice”
}
],
“样式”:“扩展”
}
]
}
],
“行动”:[
{
“类型”:“操作.提交”,
“id”:“提交”,
“标题”:“确认”,
“数据”:{
“值”:“提交”,
“id”:选择卡
}
},
{
“类型”:“操作.提交”,
“id”:“取消”,
“标题”:“取消”,
“数据”:{
“值”:“取消”,
“id”:“选择卡”
}
}
],
“$schema”:”http://adaptivecards.io/schemas/adaptive-card.json",
“版本”:“1.1”
我想知道如何测试我是否选择了卡的任何选项,并使用TestFlow从bot获得正确的响应。
谢谢。

提示类中的代码显示自适应卡提交操作数据已传输到活动的value属性中的bot:

/*为自适应卡的价值添加处理*/
else if(message.Value!=null)
{
result.successed=true;
result.Value=message.Value.ToString();
}
在测试中,您所要做的就是通过自己填充其value属性来模拟发送这样的活动

var activity=新活动(ActivityTypes.Message,值:submitActionData);
答复=等待答复