FokusHuk / MakimaBot

1 stars 0 forks source link

Создать адаптер для ITelegramBotClient #34

Closed Anton-Khan closed 3 weeks ago

Anton-Khan commented 1 month ago

Все методы работающие с ITelegramBotClient - методы расширения. Мы не можем использовать интерфейс в тестах т.к. не можем сделать mock этого интерфейса(extension не поддерживаются в moq). Также мы не можем просто создать свой Класс реализующий ITelegramBotClient. т.к. методы расширения часто вызывают его внутренние поля и пытаются достучаться до "telegram api".

  1. Предлагаю создать свой интерфейс ITelegramClient(над названием подумать лучше).
  2. Написать свой TelegramBotClientAdapter : ITelegramClient, который будет делегировать вызовы из нашего кода в реальный ITelegramBotClient(и пусть он там использует свои методы расширения).
  3. Прокинуть через DI в TelegramBotClientAdapter - ITelegramBotClient, а в весь проект наш ITelegramClient(адаптер).
  4. В тестах будем использовать тестовый TelegramBotClientTest : ITelegramClient. И там уже нормальные методы будут(мы же тестируем не то, как ведет себя сторонний TelegramBotClient, а поведение классов, котторые его используют).
Anton-Khan commented 1 month ago

Я мельком глянул в качестве чего TelegramBotClient у нас используется. В основном это SendTextMessageAsync. Можно это вынести в отдельный интерфейс. Остельное(где задействованы другие его функции) либо не трогать пока, либо тоже вынести в отдельный/ые интерфейс/ы. Ну и соответственно реализовать их в одном/нескольких классах адаптерах.

Anton-Khan commented 1 month ago

Сделал TelegramTextMessageSender : ITelegramTextMessageSender для отправки сообщений. Это просто обертка над методом расширения SendTextMessageAsync для ITelegramBotClient.

Нужно смотреть pr с тестами