我们正在为C ++项目提供单元测试。我们的目标是覆盖整个项目的60%。该项目使用Apache Thrift生成的大量代码进行客户端和服务器之间的通信。
我们应该为生成的代码进行单元测试吗?如果我们不为代码引入单元测试,一些覆盖工具会抱怨我们忽略了项目的很大一部分。
Apache Thrift是否已提供这些单元测试?
答案 0 :(得分:3)
有许多测试在CI服务器上运行以确保
除了Apache Thrift Test Suite之外,每种语言绑定可能会也可能不会定义额外的测试来根据需要测试特定内容,e.g. as shown here。
关于"是否有必要":首先,我们都会犯错误(except Linus当然)。我可能不会再去测试整个事情,但我会在我自己的代码中测试那些使用第三方库实现某种行为的部分。
答案 1 :(得分:1)
我并不特别了解Apache Thrift,但可以安全地假设任何“大牌”库/框架都有自己的测试来尝试确保它没有从根本上被打破。但是:
这些测试无法测试您对库/框架的使用。在30秒的搜索中,Thrift使用接口定义语言,因此如果您编写的IDL代码中存在“问题”,Thrift可能会生成错误的代码(可能抱怨,但在C / C ++中认为相当于未定义的行为。
他们的测试不会测试代码如何使用自动生成的代码。您可能以不打算使用的方式使用它,因此它们的“正确”代码仍然会给出错误的结果(对于您的应用程序)。
Thrift的新版本可能与早期版本的行为不同,其方式会破坏您对它的使用。假设他们被提及,那么搜索此类更改的发行说明容易出错,因此您可能需要对应用程序其余部分所依赖的功能进行一些测试。如果您使用最新版本自动保持最新版本,这一点尤其重要。
因此,您可能不需要按照编写代码的程度对其进行单元测试,但是您希望在生成的代码附近进行测试以检测使用它时的问题和/或新版本发布时的行为。