Wpis z mikrobloga

Cześć,
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ć callbacka ustawiającego promise. Czy dla samych unit testów dobrym wyjściem będzie discardować future zwracany przez Client::Connect() czy jednak design powinien zostać przerobiony?

#cpp #unittest #programowanie #programista15k
  • 6
@Parseval Dlaczego właściwie design testów uniemożliwia Ci wywołać tego callbacka?
Zawsze możesz do klienta wstrzyknąć mocka Connection i sterować promisem z poziomu testu.
  • 0
@SpinOff Takiego mocka właśnie wstrzykuję, ale po zamockowaniu interfejsu nie wiem jakbym mógł tym promisem z jego poziomu sterować. Czy z pomocą przyjdą tutaj fixtury?
@Parseval
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.