Как протестировать функцию обратного вызова? (C ++ Boost Unit test) - PullRequest
3 голосов
/ 02 декабря 2010

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

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 () может быть вызван во время любого из тестов.Есть ли лучший способ сделать это?

1 Ответ

2 голосов
/ 02 декабря 2010

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

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.");
}

Редактировать: Лучшее решение, предложенное 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.");
}
...