Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何对回调函数中的异常进行单元测试_C++_Unit Testing_Callback_Cppunit - Fatal编程技术网

C++ 如何对回调函数中的异常进行单元测试

C++ 如何对回调函数中的异常进行单元测试,c++,unit-testing,callback,cppunit,C++,Unit Testing,Callback,Cppunit,我试图对一个函数进行单元测试,该函数立即返回,然后通过回调函数返回实际结果。有谁能帮助我如何使用cppunit对这个函数进行单元测试 例如 MyFunction(回调调用) { } MyFunction立即返回success,然后返回回调函数中的实际结果,从回调中抛出异常myexception如何进行单元测试以确保抛出myexception?MyFunction立即返回的唯一方法是有一个最终调用回调函数的工作线程。如果是这样,那么就不可能在代码中捕获从该工作线程引发的异常。您必须捕获工作线程中

我试图对一个函数进行单元测试,该函数立即返回,然后通过回调函数返回实际结果。有谁能帮助我如何使用cppunit对这个函数进行单元测试

例如

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++。