我想单元测试一个函数,它立即返回,然后通过回调函数返回实际结果。任何人都可以帮助我如何使用cppunit单元测试这个函数。如何单元测试从回调函数发生的异常
例如。
的MyFunction(回拨电话) { .....
}
的MyFunction立即返回成功,那么实际结果的回调函数,从回调的异常myexception抛出如何我单元测试,以确保我的外壳抛出?
我想单元测试一个函数,它立即返回,然后通过回调函数返回实际结果。任何人都可以帮助我如何使用cppunit单元测试这个函数。如何单元测试从回调函数发生的异常
例如。
的MyFunction(回拨电话) { .....
}
的MyFunction立即返回成功,那么实际结果的回调函数,从回调的异常myexception抛出如何我单元测试,以确保我的外壳抛出?
MyFunction立即返回的唯一方法是有一个最终调用回调函数的工作线程。如果是这样,那么就不可能在你的代码中捕获该工作线程抛出的异常。您必须捕获工作线程中的所有异常并在那里处理它们。在异常处理程序中,您仍然可以使用表示发生异常的参数调用回调函数,并通知用户相关信息。
我会使用xUnit++,并在两个阶段执行此操作:测试MyFunction
,并测试回调。
FACT("MyFunction returns immediately")
{
struct callback
{
callback()
: success(false)
{
}
void operator()() const
{
if (!success)
{
Assert.Fail() << "MyFunction executed callback before returning.";
}
}
bool success;
} cb;
MyFunction(cb);
cb.success = true;
}
FACT("The real callback throws an exception when complete")
{
auto e = Assert.Throws<MyException>(myCallback);
// further asserts for the value of e
}
充分披露,我写了xUnit ++。 – moswald
如果回调函数是用户提供的,那么如何知道它会抛出异常?如果回调函数在某些情况下抛出异常,则只需为回调函数构建单元测试即可。终究是被测试的单位。 – Dennis