【问题标题】:how to unit test an exception thown from a call back function如何对回调函数抛出的异常进行单元测试
【发布时间】:2012-11-02 09:37:31
【问题描述】:

我正在尝试对一个立即返回的函数进行单元测试,然后通过回调函数返回实际结果。任何人都可以帮助我如何使用 cppunit 对这个函数进行单元测试。

例如。

MyFunction(回调调用) { .....

}

MyFunction 立即返回成功,然后在回调函数中返回实际结果,从回调中抛出异常 myexception 如何进行单元测试以确保抛出 myexception?

【问题讨论】:

  • 如果回调函数是用户提供的,那么你怎么知道它会抛出异常呢?无论哪种方式,如果回调函数在某些情况下抛出异常,只需为回调函数构建一个单元测试。毕竟是被测试的单元。

标签: c++ unit-testing callback cppunit


【解决方案1】:

MyFunction 立即返回的唯一方法是拥有一个最终调用回调函数的工作线程。如果是这样,那么就不可能在您的代码中捕获从该工作线程抛出的异常。您必须从工作线程中捕获所有异常并在那里处理它们。在异常处理程序中,您仍然可以调用回调函数,并带有表示发生异常的参数,并通知用户。

【讨论】:

    【解决方案2】:

    我会使用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++。
    猜你喜欢
    • 1970-01-01
    • 2019-06-09
    • 2014-04-19
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多