Как написать модульные тесты для Bot Framework v4 Dialog, который требует аутентификации пользователя? - PullRequest
0 голосов
/ 28 декабря 2018

Я пишу модульные тесты (C #) для диалогов, созданных в версии 4 MS Bot Framework.Мне интересно, как выполнить модульное тестирование ComponentDialog, содержащего WaterfallDialog и OAuthPrompt, где для одного шага WaterfallDialog требуется, чтобы пользователь выполнил вход с помощью OAuthprompt?

Когда я пишу модульный тест для такого диалога с помощью TestAdapterи TestFlow я получаю следующее исключение:

OAuthPrompt.GetUserToken(): not supported by the current adapter

Это имеет смысл, потому что TestAdapter не имеет метода GetUserTokenAsync, как у BotFrameworkAdapter (этот метод вызывается из OAuthPrompt.GetUserToken).

Как мы можем обойти это?

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Существует замечательная серия Channel 9, посвященная этой теме, которую вы можете посмотреть здесь: https://channel9.msdn.com/Series/DevOps-for-the-Bot-Framework/

0 голосов
/ 04 января 2019

Прямой, честный ответ заключается в том, что это будет крайне сложно правильно учесть для модульного тестирования сегодня без больших инвестиций в обход ограничений сегодняшних API.

Как вы указали в этом конкретном случаеcase OAuthPrompt имеет strong , связанное со свойством ITurnContext::Adapter, являющимся, в частности, экземпляром BotFrameworkAdapter.Одно это «нехорошо», но в сочетании с тем фактом, что вы не можете переопределить API-интерфейсы на BotFrameworkAdapter, которые OAuthPrompt на самом деле должен вызывать, означает, что вы полностью застряли, если не используете продвинутую фальшивую среду, которая позволяетза замену не виртуальных участников.

Честно говоря, немного взглянув на это, я не думаю, что вы можете обойти это прямо сейчас.Я бы умолял вас поднять эту проблему в репозитории botbuilder-dotnet на GitHub, и я с радостью перезвоню там с рекомендацией команде о том, как они могли бы исправить это.

ОБНОВЛЕНИЕ 8/ 15/2019

Начиная с первоначального ответа, он был реорганизован для введения интерфейса IUserTokenProvider, который теперь OAuthPrompt проверяет, поддерживает ли текущий ITurnContext::Adapter, и, если это так, вызываетдо его реализации.Это означает, что теперь вы можете смоделировать этот интерфейс и реализовать подходящие сценарии для тестов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...