2010-12-02 3 views
3

Я хочу, чтобы модуль тестировал функцию клиент/сервер. Клиент вызывает сервер, сервер вызывает функцию обратного вызова. Что-то вроде:Как выполнить тестирование функции обратного вызова? (C++ Boost Unit)

void CallBack() 
{ 
    BOOST_SUCCESS(); // test is successful if this is called 
} 

BOOST_AUTO_TEST_CASE(ConnectionTest_ClientCallback) 
{ 
    CallServer(); // server will do work and call CallBack() 
    sleep(20); 
    BOOST_FAIL("Server hasn't called CallBack() within specified time limit."); 
} 

Но вышеизложенное не будет работать, потому что CallBack() может быть вызван во время любого из тестов. Есть лучший способ сделать это?

ответ

2

В функции обратного вызова установить переменную:

void CallBack() 
{ 
    callBackCalled = true; 
} 

И проверить, что в тесте:

BOOST_AUTO_TEST_CASE(ConnectionTest_ClientCallback) 
{ 
    callbackCalled = false; 
    CallServer(); // server will do work and call CallBack() 
    sleep(20); 
    if (callbackCalled) 
     BOOST_SUCCESS(); 
    else 
     BOOST_FAIL("Server hasn't called CallBack() within specified time limit."); 
} 

Edit: Лучше решение было предложено kizzx2:

BOOST_AUTO_TEST_CASE(ConnectionTest_ClientCallback) 
{ 
    callbackCalled = false; 
    CallServer(); // server will do work and call CallBack() 
    sleep(20); 
    BOOST_CHECK_MESSAGE(callbackCalled, "Server hasn't called CallBack() within specified time limit."); 
} 
+0

Вы, наверное, хотели сказать `BOOST_CHECK_MESSAGE (callbackCalled,« Сервер не вызвал CallBack() в течение указанного срока. »)` вместо 4 строк? – kizzx2 2010-12-09 15:24:45

Смежные вопросы