【发布时间】:2017-03-18 01:15:18
【问题描述】:
目前我是这样做的(伪代码):
#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 设置为仅运行客户端测试。在第二个进程中testingClient 标志没有翻转,这使它实际运行客户端测试。
有没有合适的方法来使用 boost::test 进行这种客户端-服务器单元测试?在我的情况下,来自客户端进程的所有测试日志都丢失了:我需要从 client_stdout 中读取它们,然后可能将其全部写入 BOOST_MESSAGE?
【问题讨论】:
-
看来你绝对可以使用fixtures。
-
我们使用它们,但这对我来说无济于事。它与启动单独的进程没有关系(我不能在同一个进程中运行它们)
标签: unit-testing boost boost-test