对 Apache Thrift 生成的代码进行单元测试是不是有必要?

Posted

技术标签:

【中文标题】对 Apache Thrift 生成的代码进行单元测试是不是有必要?【英文标题】:Is that necessary to unit test code generated by Apache Thrift?对 Apache Thrift 生成的代码进行单元测试是否有必要? 【发布时间】:2017-07-20 09:28:22 【问题描述】:

我们正在展示 C++ 项目的单元测试。我们的目标是覆盖整个项目的 60%。该项目大量使用 Apache Thrift 生成的代码来进行 Client 和 Server 之间的通信。

我们应该对生成的代码进行单元测试吗?如果我们不为代码引入单元测试,一些覆盖工具会抱怨我们忽略了项目的很大一部分。

Apache Thrift 是否已经提供这些单元测试?

【问题讨论】:

【参考方案1】:

在 CI 服务器上运行大量测试以确保

可以构建 Thrift 编译器并运行 语言绑定可以构建和工作 语言绑定按预期运行(包括跨语言测试)

除了Apache Thrift Test Suite,每种语言绑定可能会也可能不会定义额外的测试来测试需要的特定事物,e.g. as shown here。

关于“有没有必要”:首先,我们都会犯错误(当然是except Linus)。我可能不会再测试整个事情,但我会在我自己的代码中测试那些使用第 3 方库实现某种行为的部分。

【讨论】:

【参考方案2】:

我不特别了解 Apache Thrift,但可以肯定的是,任何“大牌”库/框架都会有自己的测试,以确保它不会从根本上被破坏。然而:

这些测试无法测试您对库/框架的使用。从 30 秒的搜索来看,Thrift 使用了一种接口定义语言,因此如果您编写的 IDL 代码中存在“问题”,Thrift 可能会生成不正确的代码(它可能抱怨,但认为相当于 C/C++ 中的未定义行为)。

他们的测试不会测试您的代码如何使用自动生成的代码。您可能以不打算使用的方式使用它,因此他们的“正确”代码仍然会给出错误的结果(对于您的应用程序)。

Thrift 的新版本可能与早期版本的行为有所不同,从而影响您对它的使用。假设它们被提及,为此类更改搜索发行说明很容易出错,因此您可能需要对应用程序其余部分所依赖的功能进行一些测试。如果您或多或少地自动更新到最新版本,这一点尤其重要。

因此,您可能不需要像编写代码时那样对它进行单元测试,但您会希望在生成的代码附近进行测试,以检测您使用它的问题和/或更改新版本发布时的行为。

【讨论】:

以上是关于对 Apache Thrift 生成的代码进行单元测试是不是有必要?的主要内容,如果未能解决你的问题,请参考以下文章

一文掌握RPC框架Apache Thrift

Apache Thrift系列详解- 概述与入门

如何使用 apache thrift 生成数组

Apache Thrift 的使用

Thrift 基础教程安装篇

Thrift远程过程调用