测试机器人时,如何保持UserState?

时间:2019-09-12 18:43:17

标签: c# .net botframework state-management

我正在尝试测试一个包含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);
            ...

但是正如我之前所说,这不会从我的SecondStepThirdStep进行。如果我只是在正常运行我的机器人,但没有进行测试,并且我认为这是由于MemoryStorage导致的,这将继续进行。使用MemoryStorage可以解决此问题吗?如果没有,我应该在测试环境中使用什么或如何使用宇宙存储?谢谢。

0 个答案:

没有答案