ruby-on-rails – Ruby on Rails – 为什么要使用测试?

我对 Ruby on Rails中的各种测试设备感到困惑.我一直在使用框架大约6个月,但我从来没有理解它的测试部分.我使用的唯一测试是Java中的JUnit3,只是简单的.

我读过的一切只是显示测试验证. rails中的验证是否不应该正常工作?它似乎更像是测试框架,而不是测试你的代码.为什么需要测试验证?

此外,测试似乎对您的代码的任何更改都非常脆弱.所以,如果你改变任何模型,你必须改变你的测试和灯具匹配.这不违反DRY原则吗?

第三,编写测试代码似乎需要很多时间.是正常吗刷新我的浏览器是否更快,看看它是否有效?我已经不得不使用我的应用程序来查看它是否正确流动,并确保我的CSS没有爆炸.为什么手动测试不够用?

我以前问过这些问题,我没有比“自动测试自动化”更多.我足够聪明,以了解自动化任务的优点.我的问题是写作测试的成本与好处相比似乎是荒谬的.也就是说,任何详细的回应都是值得欢迎的,因为我可能错过了一两个好处.

解决方法

Shouldn’t
the validations in rails just work? It
seems more like testing the framework
than testing the your code. Why would
you need to test validations?

Rails中的验证工作正常 – 实际上,Rails代码库中有单元测试来确保它.当您测试模型的验证时,您正在测试验证的具体细节:长度,接受的值等.您确定代码是按照预期编写的.一些验证是简单的帮助者,您可以选择不对“没有人可以弄乱validate_numericality_of呼叫”的概念进行测试.真的吗?每个开发人员总是记得首先写它吗?每个开发人员都不会意外删除一个坏的副本贴上的一行吗?在我个人看来,您不需要测试Rails验证帮助者的最后一个值组合,但是您需要一行来测试它的正确值,以防将来某些朋克更改它没有适当的预想.

此外,其他验证更复杂,需要大量自定义代码 – 他们可能需要更彻底的测试.

Furthermore,the tests seem super
fragile to any change in your code. So
if you change anything in your models,
you have to change your tests and
fixtures to match. Doesn’t this
violate the DRY principle?

我不相信它违反了DRY.他们正在沟通(这就是编程,沟通)两个截然不同的事情.测试说代码应该做一些事情.代码说它实际上是什么.当这些事情断开连接时,测试是非常重要的.

显然,测试代码和应用代码密切相关.我认为他们是一个硬币的两面.你不会想要一个没有背部的前面,或者没有前面的背面.良好的测试代码强化了良好的应用代码,反之亦然.两者一起用于了解您正在尝试解决的整个问题.并且写得很好的测试代码是文档 – 它显示了应该如何使用应用程序代码.

Third,writing test code seems to take
alot of time. Is that normal? Wouldn’t
it just be faster to refresh my
browser and see if it worked? I
already have to play with my
application just to see if it flows
correctly and make sure my CSS hasn’t
exploded. Why wouldn’t manual testing
be enough?

你只在非常小的项目上工作,这个测试可以说是足够的.但是,当您与几个开发人员合作开展项目时,可以使用数千或数万行代码,集成点与Web服务,第三方库,多个数据库,几个月的开发和需求变更等,还有很多其他因素在发挥.手动测试根本不够.在一个真正复杂的项目中,一个地方的变化往往会在其他地方产生不可预见的结果.正确的架构有助于缓解这个问题,但通过识别一个地方的变化何时破坏另一个地方,自动化测试也可以帮助(并帮助确定架构可以改进的点).

My problem is that
costs of writing tests seem absurdly
high compared to the benefits. That
said,any detailed response is welcome
because I probably missed a benefit or
two.

我会列出更多的好处.

如果你先测试(测试驱动开发),你的代码可能会更好.我没有遇到一个程序员谁给了一个坚实的镜头,谁不是这样的情况.测试首先迫使您考虑问题,并实际设计您的解决方案,而不是将其解决.此外,它强制您了解问题域足够好,如果您必须将其删除,您知道您的代码在您定义的限制内工作.

如果您有完整的测试覆盖范围,您可以重构没有风险.如果软件问题非常复杂(再次,持续数月的现实世界项目往往会变得复杂),那么您可能希望简化以前写过的代码.所以,你可以编写新的代码来替换旧的代码,如果它通过了所有的测试,你就完成了.它完全符合旧代码对测试的做法.对于计划使用敏捷开发方法的项目,重构是绝对必要的.总是需要做出改变.

总而言之,自动化测试尤其是测试驱动开发基本上是一种管理软件开发复杂性的方法.如果您的项目不是很复杂,成本可能会超过利益(尽管我怀疑).然而,现实世界的项目往往是非常复杂的,测试和TDD的结果本身就是:他们工作.

(如果你好奇,我发现Dan North的行为驱动开发文章对于了解很多测试值非常有帮助:http://dannorth.net/introducing-bdd)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


validates:conclusion,:presence=>true,:inclusion=>{:in=>[0,1]}validates:email,:presence=>true,:length=>{:minimum=>3,:maximum=>254},:uniqueness=>true,:email=>truevalidates:ending_order,
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各Master的状态,如果Master异常,则会做主从切换,将Slave作为master,将master做为slave。其配置也较复杂,且表现一般。redis3.0以后已经支持集群容错功能,并且非常简单1.1素材准备centos7(集群搭建,至少三个master。需
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow                 不知道大家是否注意到,全新安装ruby之后,无论是在windows或是linux还是macosX下使用rix
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 modify_my_object!,这个方法名是以!结尾,在ruby的对象里边是用于表达修改本身的意思。比如String#gsub,返回的是一个新的字符串对象;而String#gsub!,返回的是自身已经被修改的对象。不止!这样的特殊字符可以命名,ruby
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表达方式即编程语言,语言是沟通的介质,而编程语言是程序员与计算机沟通的介质。 什么是编程? 编程即程序员根据需求把自己的思想流程按照某种编程语言的语法风格编写下来,产出的结果就是包含一堆字符的文件。二编程语言分
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编程语言的特性包括:数据封装数据抽象多态性继承这些特性将在面向对象的Ruby中进行讨论。一个面向对象的程序,涉及到的类和对象。类是个别对象创建的蓝图。在面向对象的术语中,您
1.ruby的标签<ruby>漢<rp>(<p><rt>han<t><rp>)<p>字<rp>(<p><rt>zi<t><rp>)<p><uby> 
1、软件安装1.安装包是个压缩包-->解压到/homeedis_tar下命令如下: tar-zxvf./../-C/homeedis_tar2.安装c++环境yum-yinstallgcc-c++(注:redis底层源码是c++)3.解压后需要源码编译进入到redis-3.0.0后执行make4.编译完后开始安装需要指定一个安装路径
1.sass基于Ruby语言开发而成,因此安装sass前需要安装Ruby。(注:mac下自带Ruby无需在安装Ruby!)window下安装SASS首先需要安装Ruby,先从官网下载Ruby并安装。安装过程中请注意勾选AddRubyexecutablestoyourPATH添加到系统环境变量。ruby官网:https:/ubyinstaller.org/downloa
本节对我们项目实现的功能和知识点做一个简单的介绍,因为是RESTfulAPI项目,所以对于后端来说基本上没有什么UI界面可展示,那我们就在关键的点,使用客户端(Android)实现的效果图。课程简介这是一门企业级项目实战课程,目的是从0使用Rails开发一个企业级RESTfulAPI项目;他不能让你年薪30
注意点:1.redis集群至少需要6个节点。2.redis集群至少部署在3台服务器上。3.redis的版本需要在3.0以上。4.需要ruby的支持。步骤:1.安装依赖环境:yuminstallgcc-c++2.下载ruby-2.4.6,编译安装https://cache.ruby-lang.org/pububy/2.4uby-2.4.6.tar.gztarzxf ruby-2.4.6.
在我的客户项目中,我看到很多睡眠用法0.代码看起来像这样.whiletrue......sleep0end通过阅读SO的一些答案,如this,似乎睡眠0具有一定的意义.我现在想知道的是,在时间片0期间调度其他线程运行(如果它们正在等待运行)是像ruby或python这样的langVM的工作,或者它
前情提要:第11天开始,要更深入Ruby的精髓!Ruby经典面试题目#11Ruby的block,proc,lamdba方法比较?What’sdifferencebetweenblocks,procsandlambdas?block代码内存块代码内存块是用do…end围起来,围出特定一个区域、放代码的地方。就好像跑马拉松一样,道路上会进行交通管制,把参赛者
安装环境及工具系统:RedHatEnterpriseLinuxServer工具:XShell5及Xftp5等远程工具安装包:Ruby-2.4.1及以上       Rubygems-2.6.12及以上       Redis-3.2.8及以上(3.x版本才开始支持集群功能)       Redis-3.0.0-gem及以上(该版本不一定要和red
 今天在做Redis的Cluster集群的时候,在执行geminstallredis时,提示如下错误:geminstallredisERROR:Errorinstallingredis:redisrequiresRubyversion>=2.2.2.CentOS7yum库中ruby的版本支持到2.0.0,可gem安装redis需要最低是2.2.2,采用rvm来更新ruby:1
我试图在Rails4中制作应用程序.我正在挣扎.我正在尝试合并一个bootstrap主题,我遇到了供应商javascripts和其余代码的问题.我认为问题可能与在我的application.js中使用jQuery然后使用以’$’符号开头的供应商.js文件有关:$.circleProgress={我刚看过这个:https://learn.jqu
该内容全部为搬运,感谢作者的分享~,附有原文链接。使用ruby环境SASS学习系列之(一)---------SASS,SCSS环境搭建(Ruby) 使用node-sassSASS学习系列之(二)---------SASS,SCSS环境搭建(node-sass)通过命令编译:npmrunsassinput.scssoutput.csssass-loader在webpack打包里
我如何使用PHP5.3Closures,比如我们在Ruby中使用Blocks.我从来没有在Ruby中使用’for’循环,因为使用带有’each”read_all”inject’方法的块.我如何使用像Ruby块这样的PHP5.3闭包,并说再见’for’Loops
一、说明:搭建Redis集群时,安装geminstallredis报错: redisrequiresRubyversion>=2.2.2的报错,查了资料发现是Centos默认支持ruby到2.0.0,可gem安装redis需要最低是2.2.2二、解决办法:解决办法是先安装rvm,再把ruby版本提升至2.3.31.安装curlsudoyuminstal
compass.app是集成了sass的工具,安装完Compass就能够使用sass。首先,上官网 可以看到官网上推荐的两种sass使用方式,application&commandlineapplication里不仅仅只有Compass,不过现在点击Compass.app进行下载。虽然通常我们说sass运行在Ruby环境下,但Compass.app安装使用并不需要