Back-Link: https://www.hasenzaehn.ch/StaticHtml/wiki.html
Um den MaterialProjectCommunicator von konkreten Frameworks zu entkoppeln, wird eine Netzwerk-Abstraktionsschicht eingeführt.
Statt direkt QtNetwork oder cpr einzubinden, definiert ein Wrapper-Interface (IHttpClient), welche Funktionen ein HTTP-Client für dieses Projekt bereitstellen muss.
MockHttpClient lassen sich Unit Tests ohne echte Netzwerkanfragen schreiben.IHttpClient definiert genau das, was gebraucht wird – hier: GET.QtHttpClient → nutzt QNetworkAccessManagerCprHttpClient → nutzt CPR / libcurlMockHttpClient → für Unit TestsMaterialProjectCommunicator bekommt ein std::unique_ptr<IHttpClient>#pragma once
#include <string>
#include <expected>
#include <nlohmann/json.hpp>
namespace MaterialDataFetcher {
struct HttpError {
enum class Code { Network, Ssl, HttpStatus, Timeout, Parse, Unknown };
Code code;
std::string message;
};
class IHttpClient {
public:
virtual ~IHttpClient() = default;
virtual std::expected<nlohmann::json, HttpError>
get(const std::string& path) const = 0;
};
} // namespace MaterialDataFetcher
Siehe Qt-HTTP-Client: /home/httpclient/qt