前言
如果你见过我,你可能会知道我是自动化测试的忠实信徒。即使对于小型项目,我也倾向于在早期实施一些测试,对于大型项目,我认为测试是绝对必要的。我可以花很长时间来讲为什么测试很重要,而你应该这样做,但这不是今天的主题。相反,我将介绍为什么我将所有单元测试从Google Test(我之前使用的测试框架)移至Catch,并阐明了我如何做到这一点。在我们开始讨论之前,让我们回顾一下我是如何进入Google Test以及为什么我想首先改变一些东西。
一个简短的历史
许多月前这篇博文让我对单元测试很感兴趣。鉴于我没有任何经验,并且由于UnitTest ++看起来和任何其他框架一样好,我使用它编写了我的初始测试。这是在2008年左右的某个时候。在2010年,我对UnitTest ++感到有点沮丧,因为开发并不是那么强大,我希望有更多的测试宏用于字符串比较等等。长话短说,我最终将所有测试移植到Google Test。
在当世,Google Test是在 Google Code,上开发的,确实经常版本发布,但不是经常。将Google Test捆绑到单个文件中需要运行一个单独的工具(而且它仍然这样。)。我最终使用Google Test进行了所有测试 - 其中大约有3000个测试,其中包含大量Fixtures。在开发时,我在每个构建上运行单元测试,所以我还写了一个自定义报告者,所以我的控制台输出如下所示:
SUCCESS (11 tests, 0 ms)
SUCCESS (1 tests, 0 ms)
SUCCESS (23 tests 1 ms)
您可能想知道为什么还会记录时间:鉴于每次编译都运行测试,它们运行得更快,所以我总是关注测试时间,如果事情开始变慢,我可以移动它进入一个单独的测试套件。
多年来,这对我很有帮助,但 我对Google Test仍有一些抱怨。首先,很明显这个项目是由谷歌开发的,所以他们的方向 - 死亡测试等 - 并没有让我的生活更简单。与此同时,我的视野里出现了一个新的框架:Catch。
接触Catch
你可能会问为什么要使用Catch?对我来说,主要有这几个原因: