如何为libevent管理的事件驱动的应用程序编写单元测试?

时间:2012-01-19 17:26:02

标签: cppunit libevent

我正在使用libevent库为异步I / O编写一个事件驱动的应用程序。本质上,应用程序有一个evconnlistener监听端口上的数据。在接收数据时,根据数据有效负载将数据转发到相应的http REST端点。转发组件使用libevent提供的evhttp_ *。

我能够将应用程序作为外部进程进行测试,以满足应用程序的健全性,但是在生成代码覆盖率报告时我很难过。我如何编写可以通过常规单元测试框架(如cppunit)调用的单元测试?

1 个答案:

答案 0 :(得分:4)

在异步I / O调用周围添加包装层。然后,您可以替换“MockIO”类来处理I / O连接的测试。

这听起来像是在描述集成而不是单元测试。单元测试实际上是单独测试每个单独的模块,而不是它们如何组合在一起以提供系统功能。

一个单元测试将确保从I / O事件接收数据。单独的测试将确保正确接收送入REST端点的数据。另一个单独的测试将确保REST端点根据需要解析它。关于I / O事件测试,我将添加更多单元测试来模拟I / O故障,断开连接和其他不愉快路径,以确保异常处理代码正常运行,以及所有代码行模块进行了测试。类似地,我还会使用各种错误输入来测试端点:空指针,空缓冲区,真正长缓冲区,意外数据类型,以及通过该方法执行所有路径所需的任何不同测试。

我们在单元测试中努力(但并不总是实现)完整的代码覆盖。集成测试表明这些部分成功结合在一起,但我们无法始终测试每个交互。最重要的假设是,如果单元测试通过,那么无论他们在做什么,这些部分都应该很好地协同工作。

我认为一本书可以更好地帮助您突破“难倒”阶段,让您更好地了解自动化单元测试。如果您正在尝试将单元测试添加到现有项目中,那么Michael Feathers的书“有效地使用遗留代码”非常棒(Mike是CppUnit的作者。)如果您刚刚开始使用一个小项目,那么The Art of Roy Osherove的单元测试是一个很好的阅读。一旦你了解了单元测试的想法,Gerard Meszaros的xUnit测试模式就是一个很好的资源,可以帮助你学习如何编写可维护的测试。

如果你有机会,可以花一些时间向导师学习。