Unit testing 如何对回调函数进行单元测试?(C+;+;增压单元测试)

Unit testing 如何对回调函数进行单元测试?(C+;+;增压单元测试),unit-testing,boost,Unit Testing,Boost,我想对客户机/服务器功能进行单元测试。客户端调用服务器,服务器调用回调函数。比如: 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

我想对客户机/服务器功能进行单元测试。客户端调用服务器,服务器调用回调函数。比如:

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()。有更好的方法吗?

在回调函数中设置一个变量:

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

您可能想说
BOOST\u CHECK\u MESSAGE(CallBack称为“服务器在指定的时间限制内未调用CallBack()”)
而不是4行?@kizzx2:我不知道-我会修改我的答案。