Hey,
Ostatnio podczas pisania unit testów naszło mnie na refleksje i mam przeczucie, że spierniczyłem design projektu, ale do rzeczy. Stworzyłem strukturę gdzie foldery są podzielone na funkcjonalności, a w każdym takim folderze są pliki źródłowe i CMakeLists tworzący z nich bibliotekę, która linkowana jest do głównego targetu projektu. Załóżmy, że istnieje klasa MqttClient i klasa MqttConnection, która impelemntuje interfejs. W unit testach tworzę mocka tego interfejsu co jest oczywiste, ale pojawia
Ostatnio podczas pisania unit testów naszło mnie na refleksje i mam przeczucie, że spierniczyłem design projektu, ale do rzeczy. Stworzyłem strukturę gdzie foldery są podzielone na funkcjonalności, a w każdym takim folderze są pliki źródłowe i CMakeLists tworzący z nich bibliotekę, która linkowana jest do głównego targetu projektu. Załóżmy, że istnieje klasa MqttClient i klasa MqttConnection, która impelemntuje interfejs. W unit testach tworzę mocka tego interfejsu co jest oczywiste, ale pojawia
Chciałbym napisać unit testy dla asynchronicznego klienta MQTT. Załączam link z kodem dla zobrazowania:
godbolt
Klasa Connection docelowo będzie implementacją biblioteki mosquito. Założeniem jest, że klasa połączenia będzie miała wątek przetwarzający operacje asynchroniczne, stąd metoda Run() uruchamiana za wysłaniem requesta o połączenie (tutaj metoda Connect()). Metoda Client::Connect() musi być blokująca ze względu na dalsze wykorzystanie klienta w programie, jednak przez prawdopodobnie zrąbany design dla unit testów nie jestem w stanie wywołać
1. W ciele testu definiujesz promise.
2. Związany z nim future zwracasz z metody Connect().
3. Przy mockowaniu metody Run() musisz zdefiniować akcję która ustawi wartość promise.