我想創建一個測試環境來使用外部C++ API,這樣我就可以脫機測試,而無需連接到實際的服務。實質上,我想創建我自己的假服務,用於測試目的。但是,我希望能夠輕鬆地在這兩種環境之間進行切換,而無需更改大量代碼。基本上,我希望能夠以某種方式在測試環境中使用外部C++ API類。我遇到的一個問題是,因爲類是外部API的一部分,所以我無法更改它們。我只能將它們包裝在我創建的其他課程中。我怎樣才能處理這個問題,同時能夠創建一個不需要我每次想要來回切換的大量代碼的環境?我在下面有一些示例代碼(使用API的相關部分)。我如何將這些類放置在測試工具中?謝謝!如何在使用外部C++ 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");
}
...
}
}
}
...
}
是的,它是彭博市場數據饋送C++ API。問題是,一臺擁有彭博訪問權限的個人電腦永遠不可用。所以我想爲自己創建一個測試環境,所以我不必一直等待訪問。 – Andrew 2011-12-29 23:08:51