对 Apache Thrift 生成的单元测试代码是否有必要?
Is that necessary to unit test code generated by Apache Thrift?
我们正在展示 C++ 项目的单元测试。我们的目标是覆盖整个项目的 60%。项目大量使用了Apache Thrift生成的代码来实现Client和Server之间的通信。
我们是否应该对生成的代码进行单元测试?如果我们不为代码引入单元测试,一些覆盖工具会抱怨我们忽略了项目的很大一部分。
Apache Thrift 是否已经提供了这些单元测试?
我不是特别了解 Apache Thrift,但可以肯定地说,任何 "big name" library/framework 都会有自己的测试,以确保它不会从根本上被破坏。然而:
这些测试无法测试您对 library/framework 的使用。通过 30 秒的搜索,Thrift 使用 接口定义语言 ,因此如果您编写的 IDL 代码中有 "problems",Thrift 可能会生成不正确的代码(它 可能抱怨,但认为等同于C/C++中的未定义行为。
他们的测试不会测试您的代码如何使用自动生成的代码。您可能以不打算使用的方式使用它,因此他们的 "correct" 代码仍然会给出错误的结果(对于您的应用程序)。
新版本的 Thrift 的行为可能与早期版本不同,在某些方面会破坏您对它的使用。假设它们被提及,搜索发行说明以查找此类更改很容易出错,因此您可能需要对应用程序其余部分所依赖的功能进行一些测试。如果您或多或少地自动更新最新版本,这一点尤其重要。
因此,您可能不需要像编写代码时那样对其进行单元测试,但您需要在生成的代码附近进行测试以检测使用它时出现的问题and/or 新版本发布后的行为变化。
运行 在 CI 服务器上进行了大量测试,以确保
- 可以构建并运行 Thrift 编译器
- 可以构建并运行语言绑定
- 语言绑定按预期运行(包括跨语言测试)
除了Apache Thrift Test Suite each language binding may or may not define additional tests to test specific things as needed, e.g. as shown here.
关于"is it necessary":首先,我们都会犯错误(当然是except Linus)。我可能不会走那么远再测试整个事情,但我会在我自己的代码中测试那些使用第 3 方库实现特定行为的部分。
我们正在展示 C++ 项目的单元测试。我们的目标是覆盖整个项目的 60%。项目大量使用了Apache Thrift生成的代码来实现Client和Server之间的通信。
我们是否应该对生成的代码进行单元测试?如果我们不为代码引入单元测试,一些覆盖工具会抱怨我们忽略了项目的很大一部分。
Apache Thrift 是否已经提供了这些单元测试?
我不是特别了解 Apache Thrift,但可以肯定地说,任何 "big name" library/framework 都会有自己的测试,以确保它不会从根本上被破坏。然而:
这些测试无法测试您对 library/framework 的使用。通过 30 秒的搜索,Thrift 使用 接口定义语言 ,因此如果您编写的 IDL 代码中有 "problems",Thrift 可能会生成不正确的代码(它 可能抱怨,但认为等同于C/C++中的未定义行为。
他们的测试不会测试您的代码如何使用自动生成的代码。您可能以不打算使用的方式使用它,因此他们的 "correct" 代码仍然会给出错误的结果(对于您的应用程序)。
新版本的 Thrift 的行为可能与早期版本不同,在某些方面会破坏您对它的使用。假设它们被提及,搜索发行说明以查找此类更改很容易出错,因此您可能需要对应用程序其余部分所依赖的功能进行一些测试。如果您或多或少地自动更新最新版本,这一点尤其重要。
因此,您可能不需要像编写代码时那样对其进行单元测试,但您需要在生成的代码附近进行测试以检测使用它时出现的问题and/or 新版本发布后的行为变化。
运行 在 CI 服务器上进行了大量测试,以确保
- 可以构建并运行 Thrift 编译器
- 可以构建并运行语言绑定
- 语言绑定按预期运行(包括跨语言测试)
除了Apache Thrift Test Suite each language binding may or may not define additional tests to test specific things as needed, e.g. as shown here.
关于"is it necessary":首先,我们都会犯错误(当然是except Linus)。我可能不会走那么远再测试整个事情,但我会在我自己的代码中测试那些使用第 3 方库实现特定行为的部分。