我将在Ruby on Rails中开始我的第一个实际项目,并且强迫自己编写TDD测试。我看不出编写测试的真正优势,但是由于它看起来非常重要,因此我将尝试。
是否有必要测试应用程序的每个部分,包括静态页面?
我将在Ruby on Rails中开始我的第一个实际项目,并且强迫自己编写TDD测试。我看不出编写测试的真正优势,但是由于它看起来非常重要,因此我将尝试。
是否有必要测试应用程序的每个部分,包括静态页面?
Answers:
TDD与测试无关,而与设计有关。编写测试会迫使您考虑该类应该如何工作以及需要哪种接口。这些测试是一个令人愉快的副作用,可以使以后的重构更加容易。
因此,牢记这一点,静态页面的行为是什么,界面是什么?
我的第一个答复是“无”和“无”。
这始终是成本效益分析。破坏功能的代价是什么?如果成本很高,则应进行彻底的测试。如果成本很低,请轻松进行测试或根本不进行测试。
还需要考虑上市时间。也许对您来说,提供主要工作的功能要比迟迟提供完全工作的功能更好。
在一般的IMO中几乎不可能回答这些问题。
我认为,在某些功能比您最初意识到的更重要的情况下,保持测试能力更为重要。
我会说“是”。如果您的测试涵盖了最简单的功能和代码,那么您可以放心,添加新代码不会导致就地代码退出工作。同样,对遇到的每个错误进行测试,可以防止回归。
是的,您应该测试所有内容...
您将不必为所有内容编写自动测试。对于您的静态页面,请使用Selenium http://seleniumhq.org/来确保一切正确。
根据我的经验,有些前端事情几乎不可能编写测试用例,但这就是为什么您实际上想要使用Mark 1眼球进行测试的原因。
测试与编码一样重要。您必须听到一句俗语:“如果出现问题,那就可以了”。INMO,在用于提高质量的许多软件工程技术中,测试是帮助您及早发现问题的最有价值的技术。
尽管不可能进行所有测试(特别是对于小型团队和大型系统),但这并不意味着您完全跳过了测试。测试值得吗?请参阅Wiki-SoftwareTesting中的 “及早发现故障”部分。
如果以这种方式编写,则TDD测试也可以成为生活规范。测试方法的名称应对业务用户有意义。
正如其他人提到的那样,在Ruby on Rails测试中,它比(大多数)其他语言中的重要得多。这是由于缺少编译器。
诸如Delphi,C ++,VB.NET等语言是已编译的语言,并且您的编译器会在方法调用中出现很多错字,例如拼写错误。在Ruby on Rails中,只有运行特定代码行或使用显示视觉警告的IDE,您才知道代码中是否有错字或错误。
由于每行代码都很重要(否则就不会出现),因此您应该测试编写的每个方法。这比您遵循一些基本的TBDD工具听起来要简单得多。
我发现瑞安·贝茨(Ryan Bates)的《如何测试》的Rails对我来说是无价的,并且确实强调了TBDD的简单性(如果正确完成的话)。
如果您确实在使用TDD方法,那么您在没有通过单元测试的情况下就不会编写代码。
我会说不要从TDD开始。一般而言,如果您花了更多时间学习架构策略,请做出明智的决定。尽管您可能会开始相信,TDD不会让您跳过该作业。
这是我的问题。当您说似乎永远浪费TDD的东西上浪费了很多时间时,当您在大量依赖项中没有想到的一件事被破坏时,您将不胜感激。当您指出在编写应用程序之前无法预测此类情况时,这是呃...为什么我们进行测试,他们告诉您,实际上这更多是关于设计而不是测试,即使测试很方便。
但是笨拙的设计产品不是难解的连锁依赖的巨型链条吗?
那是什么呢?
这是一个想法。首先,不要考虑“设计模式”中面向对象设计的以下两个原则:
“编程到接口,而不是实现”
也就是说,您的对象不应该在乎谁在进行呼叫或如何进行呼叫。只有输入了正确的args并且它们从其他对象中调用的方法才可以按预期工作。在大多数情况下,您的依赖关系链应该位于一个链接点,即调用方的方法调用以及将args放入您的方法的位置。那是您在发生故障时记录和验证并发送有用的消息以进行调试的地方。
和:
“类继承中的重要对象组成”
谁是假人?是在一个复杂的级联继承方案中为某类做某事的家伙,涉及到30个类,导致边缘案例破损,还是首先提出该体系结构的开发人员?TDD可能会比您没有的时候更快地帮助您解决比萨斜塔之内的问题,但这是否使下一次尝试修改该代码灾难的端点之一的痛苦减轻了?
这就是我困扰我的地方。TDD是否真的有助于设计或是否支持不良体系结构?在我看来,它有可能成为一种自我实现的策略。您的团队不必对糟糕的架构承担更多的责任,这些细粒度的测试组件似乎就越有用,但是最终您的应用程序变得越来越大,可以使用的PITA(假设他们从一开始就没有对架构进行过多考虑地点)。而且,如果不承认其后果,那就太容易了,这总是您在处理要随着时间进行升级和修改的应用程序时可能犯的最昂贵的错误。
要回答这个问题,请考虑“这里可能出什么问题”。特别是,如果您更改“代码”(标记/其他),您将如何确定自己没有破坏页面。好吧,对于静态页面:
就个人而言,我建议:
这里的好处是您需要可重复使用,易于使用并且可以在测试运行器中自动运行的功能。
只是为了添加所有已经非常好的答案,这是我对要测试什么以及不测试什么的思考:
做测试:
不要测试:
因此,进行以下测试是没有意义的:
assert wibble = 3
和一些代码说
wibble = 3
而且,测试演示性内容也没有意义,例如图标是否为长春花蓝色,标题所用的字体等等。
因此,您问“我应该测试静态页面”,答案是:在网站功能,业务逻辑或行为的一部分范围内对其进行测试。
因此,在我们的应用程序中,我们进行了一项测试,以检查网站的每个部分是否都适用条款和条件-匿名用户,登录用户,仪表板,应用程序内部屏幕等都可以使用。它只是检查是否存在每页上都有一个称为“条款和条件”的链接,该链接有效,然后测试表明,当它到达页面时,它看起来就像是“条款和条件”,足以确保您自己是正确的页面,无需“测试常量”或“测试演示文稿” ...因此您可以检查文本是否正确,例如,无需检查特定的字体大小或文本布局...