У меня есть приложение MSFT Bot Framework, для которого я пытаюсь писать модульные тесты. У меня есть одиночные тесты вызова / ответа, которые работают нормально, но все, что требует продолжения диалога, не работает. Свойство ActiveDialog в DialogContext, которое создается на каждом этапе, всегда имеет значение NULL, а свойство Stack всегда пусто. Я вроде как следил за этим пример сообщения в блоге. Что мне не хватает, что позволяет боту сохранять свое состояние между ходами?
Одноразовая настройка
protected virtual void TestFixtureSetup()
{
var environmentName = "development";
var builder = new ConfigurationBuilder();
var configuration = builder.Build();
_connectedServices = new BotServices(_botConfig, configuration, environmentName);
_testAdapter = new TestAdapter();
_testAdapter.Use(new AutoSaveStateMiddleware());
}
Настройка для каждого теста
protected virtual void TestSetup()
{
var memStore = new MemoryStorage();
var userState = new UserState(memStore);
var conversationState = new ConversationState(memStore);
var dialogState = conversationState.CreateProperty<DialogState>("dialogState");
_dialogSet = new DialogSet(dialogState);
_dialogSet.Add(new MainDialog(_connectedServices, conversationState, userState, new TestTelemetryClient()));
_testFlow = new TestFlow(_testAdapter, async (turnContext, cancellationToken) =>
{
var dc = await _dialogSet.CreateContextAsync(turnContext, cancellationToken);
await dc.ContinueDialogAsync();
if (!turnContext.Responded)
{
await dc.BeginDialogAsync(nameof(MainDialog));
}
});
}
Тестовое задание
public async Task MenuTestMethod(string subMenuOption, string verificationString)
{
var firstMenu = Responses.BuildFirstMenu(null, null);
var secondMenu = Responses.BuildSecondMenu(null, null);
await _testFlow
.Send("go to first menu")
.AssertReply((activity) =>
{
Assert.AreEqual(firstMenu.Attachments[0].Content, activity.AsMessageActivity().Attachments[0].Content);
})
.Send("go to second menu")
.AssertReply((activity) =>
{
Assert.AreEqual(secondMenu.Attachments[0].Content, activity.AsMessageActivity().Attachments[0].Content);
})
.Send(subMenuOption)
.AssertReply((activity) =>
{
Assert.IsTrue(activity.AsMessageActivity().Text.Contains(verificationString));
})
.StartTestAsync();
}
OnTurn
,OnMessage
,OnDialog
и все остальное, что, по вашему мнению, может иметь отношение. - person mdrichardson   schedule 06.08.2019MainDialog
. Я уверен, что мы здесь что-то делаем не так. К сожалению, я столкнулся с другими проблемами LUIS / диспетчерские, которые более важны. Спасибо, что изучили это! - person DevNoob   schedule 13.08.2019