C++ 我如何在C++;?
httpClientSync是一个局部变量,它将在测试完成时销毁。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接口:
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
,它需要是某种类型的参数。我所看到的最不具侵入性的方法是将typeHttpClientSync
作为默认模板值,然后在需要时在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);
}