Я пытаюсь создать тестовую среду для использования внешнего API C ++, чтобы я мог тестировать вещи в автономном режиме без необходимости подключения к реальной службе. По сути, я хочу создать свой собственный поддельный сервис, который будет использоваться в целях тестирования. Однако я хочу иметь возможность легко переключаться между этими двумя средами, не меняя тонны кода. По сути, я хочу как-то использовать внешние классы API C ++ в тестовой среде. Одна проблема, с которой я сталкиваюсь, состоит в том, что, поскольку классы являются частью внешнего API, я не могу их изменить. Я могу обернуть их только в другие классы, которые я создаю. Как я могу справиться с этим, будучи в состоянии создать среду, которая не требует от меня изменения тонны кода каждый раз, когда я хочу переключаться назад и вперед? У меня есть пример кода ниже (соответствующие части, где используется API). Как я могу поместить эти классы ниже в испытательный комплект? Спасибо!
...
SessionOptions sessionOptions;
sessionOptions.setServerHost(d_host.c_str());
sessionOptions.setServerPort(d_port);
Session session(sessionOptions);
if (! session.start())
{
std::cerr <<"Failed to start session." << std::endl;
return;
}
if (! session.openService("//blp/mktdata"))
{
std::cerr <<"Failed to open //blp/mktdata" << std::endl;
return;
}
...
SubscriptionList subscriptions;
std::set<std::string>::const_iterator cItorSubscriptionStrings(m_SubscriptionStrings.begin());
for ( ; cItorSubscriptionStrings != m_SubscriptionStrings.end(); ++cItorSubscriptionStrings)
{
subscriptions.add((*cItorSubscriptionStrings).c_str(),
"LAST_PRICE,BID,ASK,TIME",
"",
CorrelationId((char*)(*cItorSubscriptionStrings).c_str()));
}
session.subscribe(subscriptions);
while (true)
{
Event event = session.nextEvent();
MessageIterator msgIter(event);
...
while (msgIter.next())
{
Message msg = msgIter.message();
if (event.eventType() == Event::SUBSCRIPTION_DATA)
{
if ((msg.hasElement("LAST_PRICE")) || ((msg.hasElement("BID")) && msg.hasElement("ASK")))
{
double mid = 0;
if ((msg.hasElement("BID")) && (msg.hasElement("ASK")))
{
mid = (msg.getElementAsFloat64("BID") + msg.getElementAsFloat64("ASK")) / 2;
}
else
{
mid = msg.getElementAsFloat64("LAST_PRICE");
}
...
}
}
}
...
}