2011-12-29 13 views
0

外部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"); 
       } 

       ... 
      } 
     } 
    } 

    ... 
} 
+0

はい、ブルームバーグ市場データフィードC++ APIです。問題は、Bloombergのアクセス権を持つPCは決して容易に利用できないということです。だから私は自分でテスト環境を作りたいので、アクセスを待つ必要はありません。 – Andrew

答えて

0

ことの一つは、少なくともあなたが気にそれらの機能のために、インタフェース(すなわち、ヘッダファイル)を使用し、独自の実装を提供することです。両方のバージョンを切り替えることは、本質的には異なるライブラリとのリンクになります。テスト用のもの、実際の実装用のものです。

これに対処できるいくつかの問題があります。

  • しばしばスタブバージョンが異なるデータを保存したい:唯一のパブリックインターフェイスを保持し、プライベートインターフェイスを変更することで(この場合のコンパイルに異なる検索ヘッダーのpathesを使用して、例えば、異なる宣言に向けする必要があります) // WWW:
  • いくつかのオブジェクトは、あなたが本当にあなたがsimplicator(HTTPを導入しようとすることができ
+0

これはいい考えです。私はテストピースのために別々のディレクトリ/ソースファイルを作成します。どういうわけか、私はそれらをひとつの恥骨のインターフェースで一緒にメッシュ化しようとしていました。 – Andrew

0

を実装したくない他の関数を呼び出すことができ、特定の方法で

  • インライン関数をプライベートサブオブジェクトを構築する必要があるかもしれません。 natpryce.com /articles/000785.html)。指定されたAPIがテストに適していない場合は、その上に新しいシンインターフェースを導入します。

  • 関連する問題