在为简单的Rails应用编写规范时,以下是完整测试覆盖的正确方法吗?
这是否足够,太多(例如,如果我编写了功能规格,我可以跳过一些较低级别的规格),还是不够?为什么呢?
答案 0 :(得分:3)
您不需要为每个层中的每个对象编写规范,以获得100%的测试覆盖率或测试驱动器(需要您实现)应用程序中的所有重要行为。相反,正如行为驱动开发(BDD)建议的那样,在外面编写规范,并在必要时编写较低级别的规范。
测试完整性的最重要衡量标准是需求覆盖:它对每个用户故事以及每个需要新代码的故事的每个细节都有用,至少在一个测试中表示。如果您遵循典型的敏捷实践(提及用户故事表明您是这样),那么您的测试可能是您记录需求的唯一地方,因此您可能无法在此类覆盖范围内添加数字。
也很有帮助对于每个故事,
此时,您已经测试了每一层(控制器,模型,视图,帮助器,邮件程序等),只有功能规格。
编写模型和帮助程序规范,以提出完全存在于这些类中的详细要求。例如,一旦您编写了一个悲伤路径功能规范,该规范确定输入一个特定的无效属性会将用户返回以编辑其表单提交并显示消息,您可以完全通过编写更多示例来处理其他无效属性model的规范测试模型属性的验证,并让你已经测试驱动的架构将错误传播回用户。
请注意,尽管您的功能规范已经通过模型和帮助器方法测试了快乐路径,但只要您开始编写针对次要或错误情况的方法的示例,您可能希望编写happy-path示例或示例对于该方法,您也可以在一个地方看到该方法的完整描述,因此您可以通过运行其所有示例完全测试该方法,而不必运行任何功能规范。
您可能根本不需要某些规格:
只要您在编写新代码之前总是编写测试,您将始终拥有100%的行覆盖率。
答案 1 :(得分:1)
该测试策略听起来非常全面。如果您已经完成了所有这些测试,那么您将获得很好的测试覆盖率。但是,交付项目需要更长的时间。作为进行更有限测试的人,你也不会敏捷。测试必须适合该项目。不要过度测试。过度测试可能会花费时间和金钱。不要接受测试。在测试中可能会花费时间和金钱。
有正确的方法进行单元测试。有正确的方法进行集成测试。手套必须适合。如果您的应用程序主要面向前端,那么最好从集成测试开始。如果您编写后端应用程序或API,那么单元测试可能是一个更好的起点。我认为接近一种测试方式,然后扩展到不同的样式是一个比尝试测试应用程序的每一层更好的开始。
为什么不从简单的单元测试开始?它们很容易写。编写这些测试,然后跟踪您发送的错误数量。你是否放入了太多的错误?你有很多回归问题吗?是否存在您的套件无法正常生产的错误?如果答案是肯定的,那么也许是时候写一些更高级别的测试了。请记住,测试的级别越高,您需要支付的开发成本就越高。
如果您没有发送错误,那么您没有理由再编写测试。记住这里的最终目标。我们想发送无bug代码。如果我们可以单独编写一个测试和一个测试来确保我们这样做,那么就没有理由进一步测试。