外部C++ APIを使用するためのテスト環境を作成して、実際のサービスに接続することなくオフラインでテストできるようにしようとしています。本質的には、テスト目的で使用される自分の偽のサービスを作成したいと考えています。しかし、私はこれらの2つの環境の間で、大量のコードを変更することなく簡単に変更できるようにしたいと考えています。基本的には、テスト環境で外部C++ APIクラスを何らかの形で使用できるようにしたいと考えています。私が取り組んでいる問題の1つは、クラスが外部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です。問題は、Bloombergのアクセス権を持つPCは決して容易に利用できないということです。だから私は自分でテスト環境を作りたいので、アクセスを待つ必要はありません。 – Andrew