如何测试客户端 - 服务器与升压流动::测试

如何测试客户端 - 服务器与升压流动::测试

问题描述:

目前我做这种方式(伪):如何测试客户端 - 服务器与升压流动::测试

#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?

+0

看起来你肯定可以使用[赛事](http://www.boost.org/doc/libs/1_63_0/libs/test/doc/html/ boost_test/tests_organization/fixtures.html)。 –

+0

我们使用它们,但这对我来说无济于事。它与启动单独的进程没有关系(我不能在同一进程中运行它们) – Pavel

如前所述夹具将帮助您:

  • 设置服务器测试
  • 之前测试

设置服务器后杀死这台服务器就意味着你开始另线程在灯具中(跟踪该线程或任何信号让您与此线程通信)。该线程应该在测试期间保持活动状态。在夹具拆卸中,只需要指示线程退出。

我会避免调用不同的参数相同的测试模块,正如你提到的,由于种种原因:

  • 服务器实际上是不是测试:如果你不运行例如测试模块。命令行中的任何参数,那么这个服务器将运行,这是你想在测试之外避免的东西
  • 你对服务器生命周期没有/很少的控制,并且从一次测试中很难检查服务器是实际运行

希望这有助于