は現在、私はそれをこの方法(擬似コード)を実行します。はブーストで流れ::テスト
#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に書き込む必要がありますか?
が見えるのに役立ちますboost_test/tests_organization/fixtures.html)。 –
私たちはそれらを使用しますが、それは私の場合には役に立たないでしょう。別のプロセスを開始することとは関係がありません(同じプロセスでは実行できません) – Pavel