SVCS - Русская документация
Загрузка...
Поиск...
Не найдено
MockSubject.hxx
См. документацию.
1
13#pragma once
14
15#include "../../services/ISubject.hxx"
16#include "../../services/IObserver.hxx"
17#include "../../services/Event.hxx"
18
19#include <vector>
20#include <memory>
21#include <string>
22#include <algorithm>
23
29 * for isolating and testing core VCS components. These mocks provide
30 * controlled behavior and verification capabilities for unit tests.
31 *
32 * @russian
33 * @namespace svcs::test::core::mocks
34 * @brief Mock объекты и тестовые дубли для тестирования основных компонентов.
35 * @details Содержит mock реализации основных интерфейсов, используемых
36 * для изоляции и тестирования основных компонентов СКВ. Эти моки предоставляют
37 * контролируемое поведение и возможности верификации для модульных тестов.
38 */
40
41class MockSubject : public svcs::services::ISubject {
42public:
45 std::shared_ptr<svcs::services::IObserver> observer;
46 };
47
48 MockSubject() = default;
49 ~MockSubject() override = default;
50
51 void attach(std::shared_ptr<svcs::services::IObserver> observer) override {
52 observers.push_back(observer.get());
53 observer_pointers.push_back(observer);
54 }
55
56 void detach(std::shared_ptr<svcs::services::IObserver> observer) override {
57 auto it = std::find(observers.begin(), observers.end(), observer.get());
58 if (it != observers.end()) {
59 observers.erase(it);
60 }
61
62 auto ptr_it = std::find(observer_pointers.begin(), observer_pointers.end(), observer);
63 if (ptr_it != observer_pointers.end()) {
64 observer_pointers.erase(ptr_it);
65 }
66 }
67
68 void notify(const svcs::services::Event& event) const override {
69 recorded_notifications.push_back({event, nullptr});
70 for (auto* observer : observers) {
71 observer->update(event);
72 recorded_notifications.push_back({event, nullptr});
73 }
74 }
75
76 void clearNotifications() {
77 recorded_notifications.clear();
78 }
79
80 size_t getNotificationCount() const {
81 return recorded_notifications.size();
82 }
83
84 const std::vector<RecordedNotification>& getNotifications() const {
85 return recorded_notifications;
86 }
87
88 bool hasNotification(svcs::services::Event::Type type) const {
89 for (const auto& notification : recorded_notifications) {
90 if (notification.event.type == type) {
91 return true;
92 }
93 }
94 return false;
95 }
96
97private:
98 std::vector<svcs::services::IObserver*> observers;
99 std::vector<std::shared_ptr<svcs::services::IObserver>> observer_pointers;
100 mutable std::vector<RecordedNotification> recorded_notifications;
101};
102
103}
Интерфейс Subject (Издатель) (Абстрактный Базовый Класс).
Определения ISubject.hxx:35
std::vector< IObserver * > observers
Коллекция зарегистрированных наблюдателей.
Определения ISubject.hxx:40
void notify(const svcs::services::Event &event) const override
Уведомляет всех прикрепленных наблюдателей о событии.
Определения MockSubject.hxx:56
Mock объекты и тестовые дубли для тестирования основных компонентов.
Структура, описывающая событие, опубликованное ядром VCS.
Определения Event.hxx:27
Type
Типы событий, которые могут быть опубликованы.
Определения Event.hxx:31
Определения MockSubject.hxx:31