如何对一个回调函数进行单元测试?(使用C++ Boost Unit测试)

3
我想对一个客户端/服务器函数进行单元测试。客户端调用服务器,服务器调用回调函数。类似于:
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个回答

3
在回调函数中设置一个变量:
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.");
}

1
你可能想要说的是 BOOST_CHECK_MESSAGE(callbackCalled, "Server hasn't called CallBack() within specified time limit.") 而不是那4行代码吧? - kizzx2
@kizzx2:我之前不知道这点,我会修改我的回答。 - Jackson Pope

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接