Guide指南 18章应用测试指南(简单学习了一下。)

(中文版--主要是为了先理解,之前看过英文版受语言影响,怕理解有偏差。)


Minitest::Test是ActiveSupport::TestCase的超类,Rails使用的默认测试库。

require ‘test_helper’  加载这个文件,这个文件有测试配置

test方法(类宏):接收一个名称和一个块。

  test "the truth" do
    assert true #=> 这是断言assertion: to state firmly sth is true
  end

assert检查:

▪ 两个值是否相等
▪ 对象是否为 nil
▪ 一行代码是否抛出异常
▪ 用户的密码长度是否超过 5 个字符

每个断言都有的可选参数定制消息  assert test, "message..."。  assert_not 希望得到false 否则报告失败。

测试驱动开发:Test-Driven Development ,TDD

我们先编写一个测试检查所需的功能,它失败了,然后我们编写代码,添加功能,最后确
认测试能通过。

可用的断言

完整且最新的列表参见 Minitest API 文档,尤其是 Minitest::Assertions
模块的文档。

http://docs.seattlerb.org/minitest/Minitest/Assertions.html

断言

作用

  1. assert( test, [msg] )

确保 test 是真值。

  1. assert_not( test, [msg] )

确保 test 是假值。

  1. assert_equal( expected, actual, [msg] )

确保 expected == actual 成立。

  1. assert_not_equal( expected, actual, [msg] )

确保 expected != actual 成立。

  1. assert_same( expected, actual, [msg] )

确保 expected.equal?(actual) 成立。

  1. assert_not_same( expected, actual, [msg] )

确保 expected.equal?(actual) 不成立。

  1. assert_nil( obj, [msg] )

确保 obj.nil? 成立。

  1. assert_not_nil( obj, [msg] )

确保 obj.nil? 不成立。

  1. assert_empty( obj, [msg] )

确保 obj 是空的。

  1. assert_not_empty( obj, [msg] )

确保 obj 不是空的。

  1. assert_match( regexp, string, [msg] )

  1. 确保字符串匹配正则表达式。

  1. assert_no_match( regexp, string, [msg] )

  1. 确保字符串不匹配正则表达式。

  1. assert_includes( collection, obj, [msg] )

确保 obj 在 collection 中。

还有很多详细见文档 可以自定义断言
Rails有一些专有断言 assert_response(options={},message=nil)

全部测试可以使用 bin/rails test 命令统一运行。

也可以单独运行一个测试,方法是把测试用例所在的文件名传给 bin/rails test 命令。

  1. $ bin/rails test test/models/article_test.rb
  1. 也可以运行测试用例中特定的测试方法:指定 -n --name 旗标和测试方法的名称
  1. 也可以运行某一行的测试,方法是指定行号。
  1. 也可以运行整个目录的测试:rails test test/controllers
  2. 还有很多功能详细见文档。 也可运行帮助 rails test -h
  3. 测试数据库在config/database.yml中配置。
  4. 固件详解:
  5. Rails 中,测试数据由固件(fixture)提供。关于固件的全面说明,参见 API 文档。
  6. http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
  7. 固件代指示例数据,在运行测试之前,使用预先定义好的数据填充测试数据库。
  8. 固件与所用的数据库没有关系,使用 YAML 格式编写。一个模型有一个固件文件。
  9. 保存在test/fixtures目录中。
  10. 如果涉及到关联,定义一个指向其他固件的引用即可
  11. 例如,下面的固件针对 belongs_to/has_many 关联:
  12. # In fixtures/categories.yml
  13. about:
  14. name: About
  15. # In fixtures/articles.yml
  16. first:
  17. title: Welcome to Rails!
  18. body: Hello world!
  19. category: about
  20. 注意,在 fixtures/articles.yml 文件中,first 文章的 category about
  21. 这告诉 Rails,要加载 fix- tures/categories.yml 文件中的 about 分类。
  22. 在创建固件关联时,引用的时另一个固件的名称,而不是id属性。
  23. 相关文档:http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
  24. 可以在YAML格式的固件中,使用Ruby代码协助生成数据,如1000.times do...end
  25. 固件是Active Record对象,所以在测试中可以直接访问。
  26. 返回 david 固件对应的 User 对象: users(:david)
  27. 返回一个数组,包含 david steve 两个固件: users(:david, :steve)
  28. 18.4 模型的单元测试。test_unit:model
  29. 用于测试应用中的各个模型,test/models目录中。Rails提供了生成器generation.
  30. bin/rails generate test_unit:model article title:string body:text
  31. Running via Spring preloader in process 82152
  32. create test/models/article_test.rb 生成测试文件。
  33. create test/fixtures/articles.yml 生成固件,内有2个数据对象
  34. 18.5 系统测试
  35. 系统测试用于测试用户与应用的交互,可以在真正的浏览器中运行,也可以在无界面浏览器中运行。
  36. 系统测试存放在test/system 目录中。Rails 为创建系统测试骨架提供了一个生成器:
  37. $ bin/rails generate system_test users
  38. invoke test_unit
  39. create test/system/users_test.rb
  40. 运行系统测试: $ bin/rails test:system
  41.  
  42. 18.6集成测试integration_test
  43. $ bin/rails generate integration_test user_flows
  44. exists test/integration/
  45. create test/integration/user_flows_test.rb
  46. 集成测试有大量可用的辅助方法。分3类:
  47. 集成测试运行程序的说明参阅ActionDispatch::Integration::Runner 模块的文档。
  48. 如果需要修改会话或集成测试的状态,参阅 ActionDispatch::Integration::Session 类的文档。
  49. 18.7 为控制器编写功能测试
  50. Rails 中,测试控制器各动作需要编写功能测试(functional test)。
  51. 控制器负责处理应用收到的请求,然后使用视图渲染响应。
  52. 功能测试用于检查动作对请求的处理,以及得到的结果或响应(某些情况下是 HTML 视图)。
  53. 请求是否成功;
  54. 是否重定向到正确的页面;
  55. 用户是否通过身份验证;
  56. 是否把正确的对象传给渲染响应的模板;
  57. 是否在视图中显示相应的消息;
  58. 测试还有很多,具体参看guide文档。
  59.  

4-4 集成测试练习,和测试基础知识(guide)。的更多相关文章

  1. app测试基础知识之命令

    app测试点:功能测试,安全测试,用户体验测试,交叉事件测试,兼容性测试,性能测试,安装/升级/卸载 ,UI测试 命令操作: adb connect 名 adb devices adb  instal ...

  2. 安全测试-WEB安全渗透测试基础知识(四)

    .4. HTTP标准 1.4.1. 报文格式 1.4.1.1. 请求报文格式 <method><request-URL><version> <headers& ...

  3. 敏捷测试(6)--基于story的敏捷基础知识

    基于story的敏捷基础知识----需求管理(三) (3)每日站会 站会的目的有三个: (1)周知进度 仅从用户故事和任务的层面周知进度,任务进度只有两种状态:完成或未完成(完成百分比). (2)周知 ...

  4. APP测试入门篇之APP基础知识(001)

    前言        最近两月比较多的事情混杂在一起,静不下心来写点东西,月初想发表一遍接口测试的总结,或者APP测试相关的内容,一晃就月底了,总结提炼一时半会也整不完.放几个早年总结内部培训PPT出来 ...

  5. 【考试】java基础知识测试,看你能得多少分?

    1 前言 共有5道java基础知识的单项选择题,每道20分,共计100分.解析和答案在最后. 2 试题 2.1 如下程序运行结果是什么? class Parent { public Parent(St ...

  6. 敏捷测试(4)--基于story的敏捷基础知识

    基于story的敏捷基础知识----需求管理(一) 基于story进行需求管理 (1)使用story模式来管理需求,将庞大的MRD划分为一个个合适粒度,且可独立交付的story(通常每个story能在 ...

  7. 敏捷测试(3)--基于story的敏捷基础知识

    基于story的敏捷基础知识----story编写 为什么使用Story? 软件行业40年多来,需求分析技术已经很成熟了,但是MRD驱动的过程不堪重负.因为往往MRD编写会占去很多时间,MRD评审又会 ...

  8. 测试工具Fiddler(一)—— 基础知识

    Fiddler基础知识 一.Fiddler是什么? Fiddler是一个http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点. ...

  9. 敏捷测试(7)--基于story的敏捷基础知识

    基于story的敏捷基础知识----迭代启动会.迭代回顾会 除需求讲解意外,需要所有团队成员参加的会议仅有两个,分别是"迭代启动会"和"迭代回顾会". (1)迭 ...

随机推荐

  1. charles破解

    替换安装路径->Charles\lib下的charles.jar文件成破解版jar文件,如果再次启动未弹出30天试用的提示,说明破解成功 charles:https://pan.baidu.co ...

  2. Java代码质量度量工具大阅兵

    FindBugs FindBugs, a program which uses static analysis to look for bugs in Java code. It is free so ...

  3. Linux基础命令---zcat

    zcat 解压有gzip压缩的文件,将解压结果送到标准输出. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法       z ...

  4. Kafka学习之(六)搭建kafka集群

    想要搭建kafka集群,必须具备zookeeper集群,关于zookeeper集群的搭建,在Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建博客有说明.需要具备两台以上装有zook ...

  5. mysql与oracle常用函数及数据类型对比00持续补充

    最近在转一个原来使用oracle,改为mysql的系统,有些常用的oracle函数的mysql实现顺便整理了下,主要是系统中涉及到的(其实原来是专门整理过一个详细doc的,只是每次找word麻烦). ...

  6. 02: tornado进阶篇

    目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 自定制t ...

  7. poj 1274 The Perfect Stal - 网络流

    二分匹配传送门[here] 原题传送门[here] 题意大概说一下,就是有N头牛和M个牛棚,每头牛愿意住在一些牛棚,求最大能够满足多少头牛的要求. 很明显就是一道裸裸的二分图最大匹配,但是为了练练网络 ...

  8. linux下如何使用命令行配置网络

    答:一共分成以下几个步骤: 注:笔者使用的是ubuntu 1.设置ip sudo ifconfig eth0 192.168.1.121 2.设置网关 sudo route add default g ...

  9. BZOJ5293: [Bjoi2018]求和 树上差分

    Description master 对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的k  次方和,而且每次的k 可能是不同的.此处节点深度的定义是这个节点 ...

  10. Ubuntu 14.04 安装adobe flash player

    参考: How to install flash payer in Ubuntu 14.04 LTS? [duplicate] Ubuntu 14.04 安装adobe flash player 32 ...