SVCS - Русская документация
Загрузка...
Поиск...
Не найдено
MockSubject.hxx
См. документацию.
1
19#pragma once
20
22#include <gmock/gmock.h>
23#include <vector>
24#include <string>
25
40 * Эти моки предоставляют контролируемые ответы команд и возможности
41 * верификации для модульных тестов CLI команд.
42 */
43namespace svcs::test::cli::mocks {
44
45using namespace svcs::services;
46
65 */
66class MockSubject : public ISubject {
67public:
68
72 * @russian
73 * @brief Хранит историю всех событий, полученных через метод notify(), для проверки утверждений.
74 */
75 std::vector<Event> notifications;
76
81 *
82 * @russian
83 * @brief Выполняет требования интерфейса ISubject, но не выполняет никаких операций.
84 * @param observer Наблюдатель для присоединения (не используется в mock).
85 */
86 void attach(std::shared_ptr<IObserver> observer) override {}
87
89
95 * @param observer Наблюдатель для отсоединения (не используется в mock).
96 */
97 void detach(std::shared_ptr<IObserver> observer) override {}
98
103
108 * @details Это основная тестовая функция, позволяющая тестовым случаям проверять,
109 * что были опубликованы правильные события.
110 * @param event Константная ссылка на структуру события для захвата.
111 */
112 void notify(const Event& event) const override {
113 const_cast<MockSubject*>(this)->notifications.push_back(event);
114 }
118
123 void clear() {
124 notifications.clear();
125 }
126
127
138 [[nodiscard]] bool containsMessage(const std::string& message) const {
139 for (const auto& notification : notifications) {
140 if (notification.details.find(message) != std::string::npos) {
141 return true;
142 }
143 }
144 return false;
145 }
146
158 [[nodiscard]] bool containsEventType(Event::Type type) const {
159 for (const auto& notification : notifications) {
160 if (notification.type == type) {
161 return true;
162 }
163 }
164 return false;
165 }
166
176 void storeNotification(const Event& event) {
177 notifications.push_back(event);
178 }
179
187 void clearNotifications() {
188 notifications.clear();
189 }
190
200 [[nodiscard]] const std::vector<Event>& getNotifications() const {
201 return notifications;
202 }
203};
204
205}
Определяет интерфейс для компонента Subject (Издатель) шаблона Observer.
Интерфейс Subject (Издатель) (Абстрактный Базовый Класс).
Определения ISubject.hxx:35
Mock реализация ISubject для тестирования событийно-ориентированных компонентов.
Определения MockSubject.hxx:40
void storeNotification(const Event &event)
Сохраняет уведомление во внутреннем векторе (псевдоним для функциональности notify).
Определения MockSubject.hxx:108
bool containsEventType(Event::Type type) const
Проверяет, соответствует ли какое-либо захваченное уведомление указанному типу события.
Определения MockSubject.hxx:95
void detach(std::shared_ptr< IObserver > observer) override
Выполняет требования интерфейса ISubject, но не выполняет никаких операций.
Определения MockSubject.hxx:57
const std::vector< Event > & getNotifications() const
Возвращает константную ссылку на вектор уведомлений для проверки.
Определения MockSubject.hxx:123
void clearNotifications()
Очищает все уведомления из внутреннего хранилища.
Определения MockSubject.hxx:115
bool containsMessage(const std::string &message) const
Проверяет, содержат ли детали любого захваченного уведомления указанную подстроку сообщения.
Определения MockSubject.hxx:81
void clear()
Очищает все захваченные уведомления.
Определения MockSubject.hxx:72
void notify(const Event &event) const override
Захватывает событие во внутренний вектор уведомлений.
Определения MockSubject.hxx:65
std::vector< Event > notifications
Хранит историю всех событий, полученных через метод notify(), для проверки утверждений.
Определения MockSubject.hxx:45
void attach(std::shared_ptr< IObserver > observer) override
Выполняет требования интерфейса ISubject, но не выполняет никаких операций.
Определения MockSubject.hxx:51
Компоненты сервисного слоя и инфраструктурные сервисы.
Mock объекты и тестовые дубли для тестирования CLI команд.
Структура, описывающая событие, опубликованное ядром VCS.
Определения Event.hxx:27
Type
Типы событий, которые могут быть опубликованы.
Определения Event.hxx:31