我应该使用多少个测试?
我在开始撰写此博客时就对如何提高应用程序质量进行了解释。 在途中,我们遇到了许多不同类型的测试。 但是,我们应该对每种类型的应用程序投资多少? 一如既往,需要平衡。 这次是关于我们可以投资多少与将创造多少价值(不是总是这样)。 因此,让我们详细看一下。
单元测试
我们已经对单元测试进行了很多研究。 如何在Objective-C,Swift中做到这一点以及如何测试Apple的MVC(测试UIElements时不要忘记在UIViewController上调用controller.view)。 单元测试的优势是什么?
- 快速
- 可靠(如果操作正确;)
- 涵盖很多部分
具有所有优势,还有什么要错过的?
- 他们是孤立的
- 不要测试零件是否装配在一起
最重要的是他们要快。 不论是10还是1000,都没关系。它们在不到几秒钟的时间内运行。 开发人员没有理由在提交更改之前不运行它们。
这很简单。 我们拥有的越多越好。 这也是我们在TDD中使用它们的原因。 确保独立编写它们。 不要使用数据库或网络。 而是存根吧!
UI测试
UI测试也是一个主题。 我们已经看到了多个框架来实现它们,以及如何使它们独立于任何后端。
优点:
- 测试组件
- 您可以将它们用于验收测试
- 它们的行为类似于用户
与往常一样,您可以期望它们有缺点:
- 慢
- 脆弱(对应用程序的每次更改都会破坏它们)
- 慢(我已经提到过吗?)
UI测试需要大量维护。 它们可能会随时中断,即使只是由于模拟器无法连接到Xcode也是如此。 因此,它们显示的每一次失败,可能都不是您应用程序中的错误。 您需要对其进行调查。 最重要的是,它们运行非常缓慢。 即使当告诉他们不要在测试开始时重新启动应用程序,使用模拟后端并删除动画(您仍然不应该这样做)时,它们也会永远占用。 目前,我们的50个测试需要15分钟以上的时间才能运行。 每次更改后,没有开发人员会这样做。 因此,您的CI需要。
拥有它们真是太好了。 但是请注意,它们需要大量工作。 由于测试很慢,因此不应有比单元测试多的测试。
验收测试
我们已经研究了无UI的验收测试。 使用这种类型可以实现令人难以置信的目标。 他们甚至可以帮助您与客户合作并以更精确的方式确定需求(如果您想了解与客户合作的方式,请查看BDD)。
那么为什么要使用它们:
- 快速(与UI测试相比)
- 测试整合
- 每个人都可以编写测试(不仅是开发人员)
- 每个人都可以访问结果(无需了解CI)
但是和往常一样,有些事情阻止了我们:
- 它需要自己的UI代码(称为夹具)
- 团队中的每个人都必须同意使用它们
- 根据基础架构,它会变得有些复杂
与UI测试相比,它们速度飞快,但与单元测试相比,速度却不那么快。 设置不是那么容易,需要花费一些时间才能说服您的团队和客户使用它们。 但是它们完全值得,因为它们可以测试组件之间的交互。
黄金大师测试
Golden-Master-Tests是介于单元测试和UI测试之间的一种。 最后,它们可以帮助您确定应用程序行为的变化。 这并不意味着这些更改是意外的,但它们将被列出。
优点:
- 检查您的用户界面,即使您看不到的最小更改
- 易于集成到任何类型的项目中
缺点:
- 你不知道什么东西坏了怎么办
- 每次更改UI都会中断
我们的应用程序应该具有一些UI,但是如您所知,少即是多。 如果用户无需进行大量导航就可以完成工作,那就更好了。 因此,我们的用户界面受到限制,因此应该是这些测试中的一小部分。 它们非常快,如果您没有其他选择来验证代码,请广泛使用它们。 但是,如果您已经使用了单元测试和其他类型,则可以将数字缩减到最低限度。
混沌测试
Netflix确实通过Chaos-Testing在我们身上做得很快。 这种技术使我们能够检查很多可能性。 遗憾的是,我们在调试选项方面受到限制。
优点:
- 测试几乎所有可能的交互
- 测试几乎所有可能的值
缺点:
- 如果我们通过用户界面进行测试,我们真的不知道发生了什么
- 耗时
尽管测试属性相当快并且可以复制,但是如果运行测试猴子,我们将遇到问题。 它的确使我们能够找到用户否则会产生的崩溃,因此它比预期的要好。 同时,我们将不得不投入大量资金来重现该错误。 如果您使用它,请每晚运行它,这样您就可以进行广泛的测试,并且在发行期间不会显示。
手动测试
我们每个人都做到了,我们每个人都讨厌他们。 正如我们在“手动测试已死”中了解到的那样,它们仍然很有用。
仍然有一些优点:
- 使用导览,您可以测试与开发人员或应用程序的特定行为无关的事物
- 有些事情很难自动化(测试与Casheer系统的交互是否有效)
缺点:
- 时间
- 没有人喜欢他们,所以他们做起来不需要任何照顾
- 如果我们已经自动化了测试用例,为什么还要重复它们呢?
与往常一样,最重要的因素是时间。 如果手工测试需要很长时间,则通常会跳过或不进行复制。 如果测试计划太长,则他们在制定测试计划时都会表现迟钝。 每次发行都花半小时是没有问题的。 花费4周是!
因此,降低您的手动测试工作量。
结论
到目前为止,不同类型的回顾。 每个人都可能听说过测试金字塔。 每个步骤的数量描述了应该进行的这种测试数量。 我们的看起来像这样:
如您所料,单元测试是所有测试的基础。 然后是基于属性的测试,验收测试,黄金大师测试,UI测试,混沌猴子测试和手动测试。 与往常一样,这是对绿色项目的一种看法。 每当您在其他项目上工作时,都必须对这些进行调整,但是在理想的世界中,请朝着这个金字塔努力。