伴随着程序成长,测试变长,复杂性增加,如何更高效的写测试,对以后开发不会造成麻烦。

测试本身没发被测试,所以一定要清楚,可控。不要加循环,不要过于复杂的自动编程。

Cost and Value 成本和价值。

测试有成本和价值 。因此要最小化成本,最大化价值。

什么是成本,什么是价值?

成本(time):

  • 写测试的时间
  • 每次运行测试花费的时间
  • 理解测试所需要的时间
  • 如果测试出错,搞定它并让程序ok的时间
  • 有时候,改变程序代码带来的调整测试所花费的时间
价值(部分)
  • 写测试的行为让它更容易的定义代码的结构
  • 在集成测试步骤,运行自动化测试快于手动测试
  • 测试可以提供有效证据:代码工作正常。
  • 如果代码变化了,测试就可以看出来,测试提供了⚠️机制。
  • 测试可以帮助开发者更容易的定位bugs
如何写测试节约时间:
  • 思考如何让测试失败,而不是成功。如果测试没办法失败,可能不需要这个测试
  • 集成测试,integration!留出时间做集成测试
  • 对于单元测试,写单元测试关联小的代码变化。使用Mocks and Stubs.
  • 尽量避免使用高成本行为,如使用额外的代码库,和数据库的大量对象。在测试中,一个好办法是使用test doubles ,可以避免单元测试用真实的数据依赖。
  • 如果发现发一个单一bug让许多测试失败,考虑是否那些测试是有用。如果失败是计划的,考虑失败的那些测试是否在计划中。
  • 有时候在开发中有用的测试被之后的测试取代。这些测试可以被删除,或skip,注释。
  • 如果要花费好多步骤来写一个单元测试,思考这种可能性:测试在试图告诉你,代码的设计可以被改进以减小依赖性。
Prescription:当写测试时,考虑短期和长期的测试成本。

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分钟的测试。

让测试变慢的几个重要原因:

  • 开始时间?
  • 代码中的依赖,在测试中需要创建大量对象来使用方法。
  • 过度的使用数据库或者额外的第三方服务
加速的办法是隔绝Rails stack的应用逻辑。可以不加载整个raisl来提速。或者不从数据库检索数据。

第6章,16章涉及相关。

Truthful 

对可能会发生变动的代码,不要测试。

Rails 5 Test Prescriptions 第4章 什么制造了伟大的测试的更多相关文章

  1. Rails 5 Test Prescriptions 第11章其他部分的测试。

    Routes✅ Helper Methods✅ Controllers and Requests✅ Simulating Requests⚠️,看之前的博客 What to Expect in a R ...

  2. Rails 5 Test Prescriptions 第9章 Testing-JavaScript: Integration Testing,❌挂一个问题webpacker::helper

    使用Capybara进行JS的集成测试 谈论驱动 让测试通过 Webpack in Development Mode Js设计 是用户在网页上有好的体验的重要因素. 尽管如此,许多网页不测试JS. 部 ...

  3. Rails 5 Test Prescriptions 第8章 Integration Testing with Capybara and Cucumber

    Capybara:  A complete reference is available atrubydoc.info. 集成测试就是把局部的程序组合起来测试. 端到端测试是一个特殊的集成测试,覆盖了 ...

  4. Rails 5 Test Prescriptions 第5章 Testing Models

    Rails,model层包含业务逻辑和储存逻辑.其中储存逻辑被ActiveRecord处理. 在model中,不是每件事都必须是ActiveRecord对象.model layer可以包含各种服务,对 ...

  5. Rails 5 Test Prescriptions 第3章Test-Driven Rails

    本章,你将扩大你的模型测试,测试整个Rails栈的逻辑(从请求到回复,使用端到端测试). 使用Capybara来帮助写end-to-end 测试. 好的测试风格,包括端到端测试,大量目标明确的单元测试 ...

  6. Rails 5 Test Prescriptions 第10章 Testing for Security

    Web 安全是一个可怕的主题.所有的你的程序都依靠密码学,代码超出了你的控制. 尽管如此,你还是可以控制部分网页安全 --所有的logins和access checks和injection error ...

  7. Rails 5 Test Prescriptions 第10章 Unit_Testing JavaScript(新工具,learn曲线太陡峭,pass)

    对Js的单元测试是一个大的题目.作者认为Ruby的相关测试工具比Js的测试工具更灵活 大多数Js代码最终是关于响应用户的行为和改变DOM中的元素 没有什么javascript的知识点.前两节用了几个新 ...

  8. Rails 5 Test Prescriptions 第7章 double stub mock

    https://relishapp.com/rspec/rspec-mocks/v/3-7/docs/basics/test-doubles 你有一个问题,如果想为程序添加一个信用卡程序用于自己挣钱. ...

  9. Rails 5 Test Prescriptions 第6章Adding Data to Tests

    bcreate the data quickly and easily.考虑测试运行的速度. fixtures and factories.以及下章讨论的test doubles,还有原生的creat ...

随机推荐

  1. 【巷子】:关于Apply、call、bind的详解

    call方法: 语法:call(thisObj,'',''........) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 说明:call方法可以用来代替另一个对象调用一个方法.call方法 ...

  2. shell 输出文件内容

    cat $filepath | while read line; do echo $line ; done #!/bin/bash #filepath=/opt/jenkins_home/worksp ...

  3. 170505、MySQL的or/in/union与索引优化

    假设订单业务表结构为: order(oid, date, uid, status, money, time, …) 其中: oid,订单ID,主键 date,下单日期,有普通索引,管理后台经常按照da ...

  4. HDU 1403 Eight&POJ 1077(康拖,A* ,BFS,双广)

    Eight Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  5. Process Monitor分析某个应用行为

    1.打开Process Mointor 2.点击filter-->filter   在弹出的对话框中Architecture 下拉框,选择Process Name 填写要分析的应用程序名字. 点 ...

  6. Jmeter,常见参数 vars、prev、ctx 、props 类的api--beanshell

    http://www.cnblogs.com/fnng/p/5827577.html---------jmeter 性能测试 jmeter常见参数 vars.prev.ctx .props 类的api ...

  7. talib 中文文档(七):Overlap Studies Functions

    Overlap Studies Functions 重叠指标 BBANDS - Bollinger Bands 函数名:BBANDS 名称: 布林线指标 简介:其利用统计原理,求出股价的标准差及其信赖 ...

  8. (1.3)DML增强功能-Apply、pivot、unpivot、for xml path行列转换

    深入了解行列转换请参考另一篇文章:https://www.cnblogs.com/gered/p/9271581.html 总结: 1.apply一般形式 --基本形式 SELECT a FROM d ...

  9. mysql 数据操作 单表查询 group by 介绍

    group by 是在where 之后运行 在写单表查询语法的时候 应该把group by 写在 where 之后 执行顺序 1.先找到表 from 库.表名 2.按照where 约束条件 过滤你想要 ...

  10. centos shell编程3【告警系统】 没有服务器端和客户端的概念 main.sh mon.conf load.sh 502.sh mail.php mail.sh disk.sh 第三十七节课

    centos shell编程3[告警系统]  没有服务器端和客户端的概念 main.sh mon.conf load.sh 502.sh mail.php mail.sh  disk.sh  第三十七 ...