我正在尝试测试一个包含userState
的对话框。 userState
创建一个userProfile
,这必须一步一步地进行。我尝试将userState
传递到Dialog
的构造函数中,当我使用cosmos db进行存储时,此方法有效。但是,在测试时,我很难将自己的cosmos数据库设置为userState
。在Startup.cs
中,这通常是为我完成的,但我不确定自己是否理解。我尝试使用MemoryStorage
,但这并没有一步一步地完成我的信息。
我像这样将其传递到我的对话框构造函数中:
public class MyDialog: ComponentDialog
{
private UserState _userState;
public MyDialog(UserState userState)
: base(nameof(MyDialog))`
{
_userState = userState;
...
我有两个步骤需要保存状态
private async Task<DialogTurnResult> SecondStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var userStateAccessors = _userState.CreateProperty<UserProfile>(nameof(UserProfile));
var userProfile= await userStateAccessors.GetAsync(stepContext.Context, () => new UserProfile());
UserProfile.Name = (string)stepContext.Result;
...
然后还需要在另一步骤中使用它:
private async Task<DialogTurnResult> ThirdStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var userStateAccessors = _userState.CreateProperty<UserProfile>(nameof(UserProfile));
var userProfile= await userStateAccessors.GetAsync(stepContext.Context, () => new UserProfile());
...
在测试对话框中,我有:
UserState userState;
[TestMethod]
public async Task Test_MyDialog()
{
userState = new UserState(new MemoryStorage());
var myDialog = new MyDialog (userState);
...
但是正如我之前所说,这不会从我的SecondStep
到ThirdStep
进行。如果我只是在正常运行我的机器人,但没有进行测试,并且我认为这是由于MemoryStorage
导致的,这将继续进行。使用MemoryStorage
可以解决此问题吗?如果没有,我应该在测试环境中使用什么或如何使用宇宙存储?谢谢。