如何测试客户端 - 服务器与升压流动::测试
问题描述:
目前我做这种方式(伪):如何测试客户端 - 服务器与升压流动::测试
#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?
答
如前所述夹具将帮助您:
- 设置服务器测试
- 之前测试
设置服务器后杀死这台服务器就意味着你开始另线程在灯具中(跟踪该线程或任何信号让您与此线程通信)。该线程应该在测试期间保持活动状态。在夹具拆卸中,只需要指示线程退出。
我会避免调用不同的参数相同的测试模块,正如你提到的,由于种种原因:
- 服务器实际上是不是测试:如果你不运行例如测试模块。命令行中的任何参数,那么这个服务器将运行,这是你想在测试之外避免的东西
- 你对服务器生命周期没有/很少的控制,并且从一次测试中很难检查服务器是实际运行
希望这有助于
看起来你肯定可以使用[赛事](http://www.boost.org/doc/libs/1_63_0/libs/test/doc/html/ boost_test/tests_organization/fixtures.html)。 –
我们使用它们,但这对我来说无济于事。它与启动单独的进程没有关系(我不能在同一进程中运行它们) – Pavel