2012-11-02 46 views
0

我想单元测试一个函数,它立即返回,然后通过回调函数返回实际结果。任何人都可以帮助我如何使用cppunit单元测试这个函数。如何单元测试从回调函数发生的异常

例如。

的MyFunction(回拨电话) { .....

}

的MyFunction立即返回成功,那么实际结果的回调函数,从回调的异常myexception抛出如何我单元测试,以确保我的外壳抛出?

+2

如果回调函数是用户提供的,那么如何知道它会抛出异常?如果回调函数在某些情况下抛出异常,则只需为回调函数构建单元测试即可。终究是被测试的单位。 – Dennis

回答

3

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

0

我会使用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 
} 
+0

充分披露,我写了xUnit ++。 – moswald

相关问题