могу понять, как построить тест...
1. подтвердить факт вызова метода send и проверить его параметры, для некоторых случаев - отправляемые заголовки 2. подтвердить факт вызова метода get сразу после предыдущего метода, установить фейковый объект возвращаемый им 3. проверить корректность данных, записанных в БД после всех этих операций
Делаем mock класса у которого вызываются методы send/get и проверяем с какими параметрами вызваны.
эти методы расположены в объектах, которые вызываются другими методами объектов других классов. Действуя таким образом, я должен написать собственную реализацию нескольких классов google_api_client, только чтобы иметь возможность замокать нужные мне методы? Нет ли какого-либо пути попроще? У меня не стоит цель проверить корректность работы google_api_client, я хочу проверить лишь то, что касается моих данных, которые передаются в этот самый клиент и получаются на выходе.
В идеале у тебя в конструктор должен приходить условный класс GmailApi у которого будут методы send/get, тогда его можно мокнуть и протестить.
абсолютно неважно, как у меня организован код. Речь идет о Gmail API, которое представлено официальной библиотекой google_api_client. И для того, чтобы отправить письмо через эту библиотеку, необходимо создать объект Google\Client, установить ему конфиги, +токен для доступа к апи, а потом созданный и настроенный таким образом клиент мы должны использовать при создании инстанса Google\Service\Gmail, где в конструкторе создается и присваивается публичному полю этого инстанса объект класса Gmail\Resource\UsersMessages и уже именно он имеет метод send, который и вызывается для отправки письма
Выносим создание и настройку клиента в контейнер зависимостей, наш сервис получает уже сконфигурированный Google\Service\Gmail который мы и будем мокать в тестах. Если у вас создается Google\Client через new прямо в методе то слабо представляю как это протестировать 🙂
Что за дичь, как организован код как раз важгно, неважно как раз что именно за клиент ты используешь. Ты должен создать сервис отправки писем, в который будешь через DI прокидывать этот клиент (параметры задаются в сервис-провайдере) и уже тогда ты его ты сможешь замокать и протестить с ним твой код.
Обсуждают сегодня