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:我不知道-我会修改我的答案。