C++ 如何对回调函数中的异常进行单元测试
我试图对一个函数进行单元测试,该函数立即返回,然后通过回调函数返回实际结果。有谁能帮助我如何使用cppunit对这个函数进行单元测试 例如 MyFunction(回调调用) { }C++ 如何对回调函数中的异常进行单元测试,c++,unit-testing,callback,cppunit,C++,Unit Testing,Callback,Cppunit,我试图对一个函数进行单元测试,该函数立即返回,然后通过回调函数返回实际结果。有谁能帮助我如何使用cppunit对这个函数进行单元测试 例如 MyFunction(回调调用) { } MyFunction立即返回success,然后返回回调函数中的实际结果,从回调中抛出异常myexception如何进行单元测试以确保抛出myexception?MyFunction立即返回的唯一方法是有一个最终调用回调函数的工作线程。如果是这样,那么就不可能在代码中捕获从该工作线程引发的异常。您必须捕获工作线程中
MyFunction立即返回success,然后返回回调函数中的实际结果,从回调中抛出异常myexception如何进行单元测试以确保抛出myexception?MyFunction立即返回的唯一方法是有一个最终调用回调函数的工作线程。如果是这样,那么就不可能在代码中捕获从该工作线程引发的异常。您必须捕获工作线程中的所有异常并在那里处理它们。在异常处理程序中,您仍然可以使用指示异常已发生的参数调用回调函数,并将其告知用户。MyFunction立即返回的唯一方法是让一个工作线程最终调用回调函数。如果是这样,那么就不可能在代码中捕获从该工作线程引发的异常。您必须捕获工作线程中的所有异常并在那里处理它们。在异常处理程序中,您仍然可以使用指示异常已发生的参数调用回调函数,并将其告知用户。我将使用,并分两个阶段执行此操作:测试
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
}
FACT(“MyFunction立即返回”)
{
结构回调
{
回调函数()
:成功(错误)
{
}
void运算符()()常量
{
如果(!成功)
{
Assert.Fail()我将使用,并分两个阶段执行:测试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
}
FACT(“MyFunction立即返回”)
{
结构回调
{
回调函数()
:成功(错误)
{
}
void运算符()()常量
{
如果(!成功)
{
Assert.Fail()如果回调函数是用户提供的,那么您如何知道它将抛出异常?无论哪种方式,如果回调函数在某些情况下抛出异常,只需为回调函数构建一个单元测试。毕竟,正在测试的是该单元。如果回调函数是用户提供的,那么您如何知道它将l抛出异常?无论哪种方式,如果回调函数在某些情况下抛出异常,只需为回调函数构建一个单元测试。毕竟,正是这个单元在被测试。完全公开,我写了xUnit++。完全公开,我写了xUnit++。