2017-03-18 13 views
0

현재 내가 (의사) 이런 식으로 수행부스트와 흐름 :: 시험

#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에서 그들을 fread 필요하고 다음 BOOST_MESSAGE에 모두 쓸 수 있을까요?

  • 서버를 설정 테스트

후이 서버를 죽이는 테스트

  • 하기 전에 서버를 설정하는 다른를 시작하는 것이 의미 :

  • +0

    이 보이는 데 도움이 boost_test/tests_organization/fixtures.html). –

    +0

    우리는 그것들을 사용하지만 그것은 나의 경우에는 도움이되지 않습니다. 별도의 프로세스 시작과 관계가 없습니다 (동일한 프로세스에서 실행할 수 없음). – Pavel

    답변

    0

    으로는 고정이 당신을 도울 것입니다 언급 스레드 (해당 스레드 또는이 스레드와 통신 할 수있는 신호를 추적하십시오). 이 스레드는 테스트 기간 동안 살아 있어야합니다. Fixture 티어 다운에서 스레드가 종료 할 때 신호를 보냅니다.

    난 당신이 제안으로 여러 가지 이유로, 다른 매개 변수와 같은 테스트 모듈을 호출 피할 것이다

    :

    • 서버는 실제로 테스트되지 않습니다 : 당신은 예를 들어없이 테스트 모듈을 실행하는 경우. 명령 줄의 매개 변수를 입력하면이 서버가 실행됩니다. 이것은 테스트 외부에서 피하고자하는 것입니다.
    • 서버 수명을 제어 할 수있는 권한이 거의 없으며 하나의 테스트에서 서버가 실제로

    희망을 실행 이것은 당신이 확실히 사용 [비품] (http://www.boost.org/doc/libs/1_63_0/libs/test/doc/html/을 만들 수있는 것처럼