我如何在 C++ 上模拟这个?
How do I mock this on C++?
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;
}
}
httpClient Sync 是一个局部变量,当测试完成时它会销毁。
我很困惑是否可以模拟 HttpClient Sync 和“执行”方法?
将此函数重构为两部分,一部分创建真正的 HttpClientSync,另一部分接受 HttpClientSync 接口:
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);
}
然后测试在参数中接受 HttpClientSync 的变体,并传递模拟而不是真实客户端。
如果您需要测试一些调用此 test
函数的 other 代码,并且您仍想模拟 HttpClientSync,则不要存储 param
在您的测试 class 中,存储 HttpClientSync& client
实例,并将其传递给构造函数。
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;
}
}
httpClient Sync 是一个局部变量,当测试完成时它会销毁。 我很困惑是否可以模拟 HttpClient Sync 和“执行”方法?
将此函数重构为两部分,一部分创建真正的 HttpClientSync,另一部分接受 HttpClientSync 接口:
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);
}
然后测试在参数中接受 HttpClientSync 的变体,并传递模拟而不是真实客户端。
如果您需要测试一些调用此 test
函数的 other 代码,并且您仍想模拟 HttpClientSync,则不要存储 param
在您的测试 class 中,存储 HttpClientSync& client
实例,并将其传递给构造函数。