C++ 我如何在C++;?

C++ 我如何在C++;?,c++,gmock,C++,Gmock,httpClientSync是一个局部变量,它将在测试完成时销毁。 我不知道是否可以模拟HttpClientSync和“执行”方法?将此函数重构为两部分,一部分创建真正的HttpClientSync,另一部分接受HttpClientSync接口: FuncRes Test::test(HttpRequest& request, std::string& result) { try { auto httpClientSync = HttpClientSync

httpClientSync是一个局部变量,它将在测试完成时销毁。
我不知道是否可以模拟HttpClientSync和“执行”方法?

将此函数重构为两部分,一部分创建真正的HttpClientSync,另一部分接受HttpClientSync接口:

FuncRes Test::test(HttpRequest& request, std::string& result) {
    try {
        auto httpClientSync = HttpClientSync::create(param);
        HttpResponse response = httpClientSync->execute(request);
        if (...) {
            return FuncRes::SUCCESS;
        } else if (...) {
            return FuncRes::RETRY;
        } else {
            return FuncRes::FAILED;
        }
    } catch (...) {
        return FuncRes::RETRY;
    } catch (...) {
        return FuncRes::FAILED;
    }
}
然后测试在参数中接受HttpClientSync的变量,并传递mock而不是真实客户端


如果您需要测试调用此
test
函数的其他一些代码,并且仍然希望模拟HttpClientSync,则不要在测试类中存储
param
,而是存储
HttpClientSync&client
实例,并将其传递给构造函数。

为了模拟
httpClientSync
,它需要是某种类型的参数。我所看到的最不具侵入性的方法是将type
HttpClientSync
作为默认模板值,然后在需要时在mock的类型上设置模板。我无法理解您的观点,可以详细解释一下吗?谢谢预期_调用(*getHttpClientSyncMock(),执行())/。次(测试::至少(1))/。将重复(抛出(XXX(“ConnectionTimeout”));您能否模拟
HttpRequest请求
,以便在调用
httpClientSync->execute
时获得所有类型的
HttpResponse响应
FuncRes Test::test(HttpClientSync& httpClientSync, HttpRequest& request, std::string& result);

FuncRes Test::test(HttpRequest& request, std::string& result) {
  auto httpClientSync = HttpClientSync::create(param);
  test(httpClientSync, request, result);
}