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

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

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. 使用_Capistrano_进行自动化部署(2)

    之前的一篇文章是为了解决问题而写的,很多东西都没有介绍清楚,这一篇文章就是完整介绍一下 Capistrano,主要的参考来源是 Modern PHP 这本书. Capistrano 是用于自动部署应用 ...

  2. CH5E09 能量相连【区间DP】

    5E09 能量项链 0x5E「动态规划」练习 描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且, ...

  3. 词频统计 in office

    ROSTCM6 1. http://www.writewords.org.uk/word_count.asp 2. http://darylkinsman.ca/tools/wordfreq.shtm ...

  4. stark - 数据列表

    一.效果图 二.数据列表 知识点: 完成(list_display)(list_display_links) 1.根据str,拿字段对象,取中文 val = self.model._meta.get_ ...

  5. eval(PHP 4, PHP 5)

    eval — 把字符串作为PHP代码执行 说明 mixed eval ( string $code_str ) 把字符串 code_str 作为PHP代码执行. 除了其他,该函数能够执行储存于数据库文 ...

  6. 6.MySQL必知必会之数据过滤-WHERE组合子句

    数据过滤-WHERE组合子句 本章讲授如何组合WHERE子句以建立功能更强的更高级的搜索条件. 我们还将学习如何使用NOT和IN操作符. 1.组合WHERE子句 上一章介绍的WHERE子句在过滤数据时 ...

  7. “4K云字库”基本框架图

    "4K云字库"基本框架图   谷歌的web-font,令"云字库"成为IT热点.   云字库,只是云计算的一个细小分支 ,而云计算的基础,是"大数据& ...

  8. 【android】如何让WebView对Video标签的支持更强力

    先说结论:各个产商对HTML5特性支持的程度不一样,用默认的WebChromeClient不能普遍适用. 因此咱基于GITHUB上一个VideoEnabledWebView库做了自己的封装,在魅族.华 ...

  9. Python中的MySQL接口:PyMySQL & MySQLdb

    MySQLdb模块只支持MySQL-3.23到5.5之间的版本,只支持Python-2.4到2.7之间的版本 PyMySQL支持 Python3.0以后的版本 PyMySQL https://pypi ...

  10. spring整合ehcache 注解实现查询缓存,并实现实时缓存更新或删除

    写在前面:上一篇博客写了spring cache和ehcache的基本介绍,个人建议先把这些最基本的知识了解了才能对今天主题有所感触.不多说了,开干! 注:引入jar <!-- 引入ehcach ...