Rails 5 Test Prescriptions 第4章 什么制造了伟大的测试
伴随着程序成长,测试变长,复杂性增加,如何更高效的写测试,对以后开发不会造成麻烦。
测试本身没发被测试,所以一定要清楚,可控。不要加循环,不要过于复杂的自动编程。
Cost and Value 成本和价值。
测试有成本和价值 。因此要最小化成本,最大化价值。
什么是成本,什么是价值?
成本(time):
- 写测试的时间
- 每次运行测试花费的时间
- 理解测试所需要的时间
- 如果测试出错,搞定它并让程序ok的时间
- 有时候,改变程序代码带来的调整测试所花费的时间
- 写测试的行为让它更容易的定义代码的结构
- 在集成测试步骤,运行自动化测试快于手动测试
- 测试可以提供有效证据:代码工作正常。
- 如果代码变化了,测试就可以看出来,测试提供了⚠️机制。
- 测试可以帮助开发者更容易的定位bugs
- 思考如何让测试失败,而不是成功。如果测试没办法失败,可能不需要这个测试
- 集成测试,integration!留出时间做集成测试
- 对于单元测试,写单元测试关联小的代码变化。使用Mocks and Stubs.
- 尽量避免使用高成本行为,如使用额外的代码库,和数据库的大量对象。在测试中,一个好办法是使用test doubles ,可以避免单元测试用真实的数据依赖。
- 如果发现发一个单一bug让许多测试失败,考虑是否那些测试是有用。如果失败是计划的,考虑失败的那些测试是否在计划中。
- 有时候在开发中有用的测试被之后的测试取代。这些测试可以被删除,或skip,注释。
- 如果要花费好多步骤来写一个单元测试,思考这种可能性:测试在试图告诉你,代码的设计可以被改进以减小依赖性。
SWIFT: The Five Qualities of Valuable Tests
- Straightforward
- Well defined
- Independent
- Fast
- Truthful
Straightforward
测试的命名直观-重要。 一目了然的本地创建的数据也有帮助。Factory_Bot有效帮助预备件。
长测试或步骤应当分类。
测试的“”描述,清晰让自己以后debug的时候可以轻松理解。
不要用loop,如果必须检验,可以抽几个重要的hash对儿,统一放在一个it中。
Well Defined
如果反复运行相同的测试得出统一的结果,这个测试则被定义的很好。
三个典型的重复问题是:
- time and date testing
- random numbers
- third-party or Ajax calls
关键的解决办法是:让测试数据可复制的,一致的。使用封装和test doubles。
第14章讨论测试第三方服务, 7章讨论test doubles
Independent
如果不依靠其他测试或额外数据,一个测试就是独立的。这样可以限定测试失败的范围。易于dubug。
影响独立性的最大障碍是使用全局数据。
第15章讲解Troubleshooing 和debug
Fast
长测试会延长测试速度,作者见过30分钟的测试。
让测试变慢的几个重要原因:
- 开始时间?
- 代码中的依赖,在测试中需要创建大量对象来使用方法。
- 过度的使用数据库或者额外的第三方服务
第6章,16章涉及相关。
Truthful
对可能会发生变动的代码,不要测试。
Rails 5 Test Prescriptions 第4章 什么制造了伟大的测试的更多相关文章
- Rails 5 Test Prescriptions 第11章其他部分的测试。
Routes✅ Helper Methods✅ Controllers and Requests✅ Simulating Requests⚠️,看之前的博客 What to Expect in a R ...
- Rails 5 Test Prescriptions 第9章 Testing-JavaScript: Integration Testing,❌挂一个问题webpacker::helper
使用Capybara进行JS的集成测试 谈论驱动 让测试通过 Webpack in Development Mode Js设计 是用户在网页上有好的体验的重要因素. 尽管如此,许多网页不测试JS. 部 ...
- Rails 5 Test Prescriptions 第8章 Integration Testing with Capybara and Cucumber
Capybara: A complete reference is available atrubydoc.info. 集成测试就是把局部的程序组合起来测试. 端到端测试是一个特殊的集成测试,覆盖了 ...
- Rails 5 Test Prescriptions 第5章 Testing Models
Rails,model层包含业务逻辑和储存逻辑.其中储存逻辑被ActiveRecord处理. 在model中,不是每件事都必须是ActiveRecord对象.model layer可以包含各种服务,对 ...
- Rails 5 Test Prescriptions 第3章Test-Driven Rails
本章,你将扩大你的模型测试,测试整个Rails栈的逻辑(从请求到回复,使用端到端测试). 使用Capybara来帮助写end-to-end 测试. 好的测试风格,包括端到端测试,大量目标明确的单元测试 ...
- Rails 5 Test Prescriptions 第10章 Testing for Security
Web 安全是一个可怕的主题.所有的你的程序都依靠密码学,代码超出了你的控制. 尽管如此,你还是可以控制部分网页安全 --所有的logins和access checks和injection error ...
- Rails 5 Test Prescriptions 第10章 Unit_Testing JavaScript(新工具,learn曲线太陡峭,pass)
对Js的单元测试是一个大的题目.作者认为Ruby的相关测试工具比Js的测试工具更灵活 大多数Js代码最终是关于响应用户的行为和改变DOM中的元素 没有什么javascript的知识点.前两节用了几个新 ...
- Rails 5 Test Prescriptions 第7章 double stub mock
https://relishapp.com/rspec/rspec-mocks/v/3-7/docs/basics/test-doubles 你有一个问题,如果想为程序添加一个信用卡程序用于自己挣钱. ...
- Rails 5 Test Prescriptions 第6章Adding Data to Tests
bcreate the data quickly and easily.考虑测试运行的速度. fixtures and factories.以及下章讨论的test doubles,还有原生的creat ...
随机推荐
- Tomcat 启动出现警告问题Setting property 'minSpar eThreads' to '25' did not find a matching property
tomcat启动报错: Jul 19, 2017 3:10:02 PM org.apache.catalina.startup.SetAllPropertiesRule beginWARNING: [ ...
- RedisDesktopManager 打开报0xc000007b程序错误
RedisDesktopManager 是一个管理redis的工具,很好用,我的电脑可以安装0.8.3版的,最新版到0.9.4了,其中经典版本是0.8.8,可惜0.8.3版之后,我的电脑安装软件后,打 ...
- [ASP.NET]从Request.Url获取根网址的最简单方法
在拼接绝对路径的网址时,经常需要从Request.Url中获取根网址(比如http://www.cnblogs.com),然后与相对路径一起拼接为绝对路径. 以前的做法如下: var uri = Re ...
- MyBatis 的真正强大在于它的映射语句 如果有一个独立且完美的数据库映射模式,所有应用程序都可以使用它
mybatis – MyBatis 3 | Mapper XML 文件 http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html mybatis – My ...
- linux中gdb的可视化调试
今天get到一个在linux下gdb调试程序的技巧和大家分享一下!平时我们利用gcc进行编程,进行程序调试时,观察程序的跳转等不是这么直观.都是入下的界面! 但是如果我们在编译连接时上加了-g命令生成 ...
- Linux下的pure-ftp的安装详解
FTP(File Transfer Protocol)是文件传输协议,常用于Internet上控制文件的双向传输.同时,它也是一个应用程序,用户可以通过它把自己PC机与世界各地所运行FTP协议的服务器 ...
- 洛谷P2024 食物链 [NOI2001] 并查集
正解:并查集 解题报告: 传送门(咕了! 其实没有很难(虽然我是交了三发才过的QAQ 但是一来好久没打并查集了恢复一下智力 二来看着智推里唯一一个蓝就很不爽(,,,虽然做了这题之后又补上了个蓝题QAQ ...
- 【Maven学习】Nexus OSS私服仓库的备份与迁移
背景 在上一篇博客 [Maven学习]Nexus OSS私服仓库的安装和配置 中,我们已经在机房搭建好了新的Nexus OSS私服仓库.下面是两个版本的Nexus OSS私服仓库的对比图. 老的Nex ...
- window 安装 Twisted 遇到的问题
scapy 需要Twisted17.1.0, Twisted报错 building 'twisted.test.raiser' extension 用Twisted 16.1.0 可以安装,使用时 I ...
- QQ-AR助人教版小学英语“动”起来
日前,人教数字出版公司与腾讯QQ达成合作,将以小学英语3-6年级8本课本为合作试点,共同推出全国首个可AR识别的课本,在QQ-AR的帮助下,课本也能“动”起来,更加生动立体地展现在孩子眼前,让学习变得 ...