2017-03-18 5 views
0

は現在、私はそれをこの方法(擬似コード)を実行します。はブーストで流れ::テスト

#include <boost/test/unit_test.hpp> 
#include <string> 

bool testingClient = true; 

BOOST_AUTO_TEST_SUITE(ProtocolSchema) 
BOOST_AUTO_TEST_CASE(server) 
{ 
    testingClient = false; 
    // start server listener 
    FILE *client_stdout = popen((argv[0] + std::string(" --run_test=ProtocolSchema/client 2>&1")).c_str(), "r"); 
    for (1000ms) 
    { 
     // listen for ping, reply with a pong 
    } 
    pclose(fl); 
} 

BOOST_AUTO_TEST_CASE(client) 
{ 
    if (!testingClient) 
     return; 
    // send ping to the server 
    // check that it replies with a pong 
} 
} 

考え方は明確である:それは、サーバーを実行しようとしたらboost::testは、順次テストを実行しますサーバーユニットのテストは、この方法でtestingClientを反転させるだけで、何もしないで終了します。サーバーテストは、クライアントテストのみを実行するように設定されたrun_test argと同じテスト実行可能ファイルを開始します。 2番目のプロセスでは、testingClientフラグが反転されず、実際にクライアントテストが実行されます。

boost :: testでこの種のクライアント/サーバユニットテストを行う適切な方法はありますか?私の場合、クライアントプロセスからのすべてのテストログは失われています:私はclient_stdoutからそれらをフリーにして、おそらくすべてをBOOST_MESSAGEに書き込む必要がありますか?

+0

が見えるのに役立ちますboost_test/tests_organization/fixtures.html)。 –

+0

私たちはそれらを使用しますが、それは私の場合には役に立たないでしょう。別のプロセスを開始することとは関係がありません(同じプロセスでは実行できません) – Pavel

答えて

0

としては、固定具がお手伝いします言及:

  • テスト

は、サーバーの設定後、このサーバーを殺すことは、あなたが別のを開始することを意味するテスト

  • 前にサーバーを設定します(そのスレッドを追跡したり、このスレッドと通信できるようにするための信号を記録しておきます)。このスレッドは、テストの期間中生存している必要があります。 Fixtureティアダウンでは、スレッドに終了を知らせるだけです。

    私はあなたがお勧めのような様々な理由のために、異なるパラメータを持つ同じテストモジュールを呼び出す避けるだろう

    • サーバーは、実際にテストではありません:あなたはたとえばなしのテストモジュールを実行する場合。コマンドライン上の任意のパラメータを指定すると、このサーバが実行されます。これは、テストの対象外にしたいものです。
    • あなたはサーバの寿命をほとんどまたはほとんど制御できません。実際

    希望を実行しているこれは、あなたは間違いなくの使用[備品](http://www.boost.org/doc/libs/1_63_0/libs/test/doc/html/を作ることができるように

  • 関連する問題