Как провести модульное тестирование одного разговорного утверждения - PullRequest
0 голосов
/ 05 августа 2020

Я работаю с ботами и Microsoft Bot Framework. Я использовал шаблон DispatchBot для создания своего бота. (https://docs.microsoft.com/de-de/azure/bot-service/bot-builder-tutorial-dispatch?view=azure-bot-service-4.0&tabs=cs)

Для диалогового тестирования я хочу создать модульные тесты. Поэтому я использовал эту документацию для сбора некоторой информации (https://docs.microsoft.com/de-de/azure/bot-service/unit-test-bots?view=azure-bot-service-4.0&tabs=csharp)

The thing is that i dont want to test dialogs, but a single statement (a question and the right answer) How can i implement this?

Здесь вы можете увидеть начало моего файла Dispatchbot.cs, в котором происходит ошибка c (поиск правильной базы знаний и т. Д. c.)

1 Ответ

2 голосов
/ 05 августа 2020

Вот ссылка на то, как мы создаем тесты для CoreBot . Скорее всего, вас заинтересует тестирование вещей в каталоге /Bots . Основываясь на тестовом коде, который вы можете найти там, вы, вероятно, захотите что-то вроде:

using System;
using System.Threading;
using System.Threading.Tasks;
using CoreBot.Tests.Common;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.Adapters;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.BotBuilderSamples.Bots;
using Microsoft.Extensions.Logging;
using Moq;
using Xunit;

namespace KJCBOT_Tests
{
    public class BotTests 
    {
        [Fact]
        public async Task TestResponseToQuesion()
        {
            // Note: this test requires that SaveChangesAsync is made virtual in order to be able to create a mock.
            var memoryStorage = new MemoryStorage();
            var mockConversationState = new Mock<ConversationState>(memoryStorage)
            {
                CallBase = true,
            };

            var mockUserState = new Mock<UserState>(memoryStorage)
            {
                CallBase = true,
            };

            // You need to mock a dialog because most bots require a Dialog to instantiate it.
            // If yours doesn't you can likely skip this
            var mockRootDialog = SimpleMockFactory.CreateMockDialog<Dialog>(null, "mockRootDialog");
            var mockLogger = new Mock<ILogger<DispatchBot<Dialog>>>();

            // Act
            var sut = new DispatchBot<Dialog>(mockConversationState.Object, mockUserState.Object, mockRootDialog.Object, mockLogger.Object);
            var testAdapter = new TestAdapter();
            var testFlow = new TestFlow(testAdapter, sut);
            await testFlow
                    .Send("<Whatever you want to send>")
                    .AssertReply("<Whatever you expect the reply to be")
                    .StartTestAsync();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...