【问题标题】:Are Unit Tests with Google Test exported with project?带有 Google 测试的单元测试是否与项目一起导出?
【发布时间】:2021-03-30 14:09:14
【问题描述】:

我一直在研究 C++ 中使用 Google Test 进行单元测试。

如果单元测试的目的是确保代码的某些部分或对象按预期的方式工作,我会认为没有必要在最终项目中编译和导出单元测试代码,对吧?无论如何,用户都不会使用它。似乎它使项目规模不必要地变大了。

我的主要问题是:所有单元测试代码是否会与最终项目一起编译和导出,还是我必须在导出之前手动删除所有单元测试?

是否有单元测试和导出项目的最佳(或常见)实践?

【问题讨论】:

  • 如果您的被测组件遵循“开放”原则,那么您的所有测试都可以在产品外部,因此不包含在“安装程序”中,但如果是SDK形式,则可以包含图书馆。如果组件遵循“封闭”原则,则可能需要将测试融入内部。您必须确定这些测试的侵入性以及是否需要在生产前将其删除。另见softwareengineering.stackexchange.com/questions/199090/…

标签: c++ unit-testing googletest


【解决方案1】:

如果您要发布一个库,那么发布单元测试是很常见的。例如,假设您正在 Mac 或 Linux 上进行开发,并且有人想在 Windows 上进行编译。好吧,他们应该能够运行您的测试以确保它们在不同的环境中通过。或Android,或一些微控制器。随便。

另外,有人可能会决定帮助您改进项目。他们将添加一个非常酷的功能。如果他们可以运行您的单元测试以确保他们不会破坏任何东西,那就太好了。

是的,如果您将项目作为源代码发布,请包含单元测试。如果你只是发布一个编译库,你可以排除它们。

【讨论】:

  • 很好的答案!谢谢!我很好奇,对于单元测试,我将它们写在与我测试的类对象相同的文件中。将所有单元测试代码放在一个文件中是最佳实践吗?这样,如果我需要在不编译单元测试的情况下导出项目,我可以排除该文件。
  • @Mathematician 我不太确定你在问什么。趋势似乎有一个包含所有自动化测试的测试目录,而这些不会被编译到你发布的任何东西中。
【解决方案2】:

任何测试都用于维护源代码。

当您对源代码进行一些更改时,您应该运行测试以验证:新功能正常工作并且旧功能没有损坏。 如果测试失败,这表明开发人员必须修复某些问题。

因此,如果您的应用程序或库交付时准确无误,则无需交付测试。为什么?当您只有可执行文件时,您无法修改代码,因此没有必要运行测试。

如果您将库作为开源发布,那么您的测试也应该发布。

如果您仅将库发布为可执行文件,则测试源代码可以是文档形式。如果测试编写得当,他们将记录如何以各种可能的方式使用 API,并且由于测试是一种代码(正式语言),因此这种形式的文档不能被误解。

将测试作为可执行文件发送根本没有降神会。

我建议观看 Bob 叔叔(Robert C. Martin)的演讲,其中大部分内容他解释了测试的目的以及它们为何重要。

【讨论】:

  • 谢谢!我一定会去看看的。
猜你喜欢
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 2013-01-04
  • 2011-11-07
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多