3

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

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

4

1 回答 1

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 测试模式是一个很好的资源,可以帮助你学习如何编写可维护的测试。

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

于 2012-02-15T21:43:15.957 回答