目前我这样做(伪代码):
#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
,这样下一次测试就不会做任何事情并退出。 server test启动相同的测试可执行文件,run_test
arg设置为仅运行客户端测试。在第二个过程testingClient
标记未被翻转,这使它实际上运行客户端测试。
有没有一种正确的方法来使用boost :: test进行这种客户端 - 服务器单元测试?在我的情况下,客户端进程的所有测试日志记录都丢失了:我需要从client_stdout中将它们写入,然后将它们全部写入BOOST_MESSAGE?
答案 0 :(得分:0)
如上所述,灯具会帮助你:
设置服务器意味着您在fixture中启动另一个线程(跟踪该线程或任何让您与该线程通信的信令)。在测试期间,该线程应该是活动的。在夹具拆解中,只需发出线程信号即可退出。
由于各种原因,我会避免使用不同的参数调用相同的测试模块:
希望这有帮助