单元测试

单元测试针对model,主要是测试model中的业务规则,测试model中的验证validates规则。

单元测试的文件存放在test/unit文件夹,针对user的model的单元测试文件是user_test.rb。

常用命令

从db/schema.rb中同步测试数据库的结构。

在数据库结构变化之后,就需要执行这个命令,保持测试数据库的结构和最新的数据库结构一致。

  1. rake db:test:prepare

还有其他的一些相关命令。

Tasks Description
rake db:test:clone 重建测试数据库结构
rake db:test:clone_structure 根据开发环境的数据库结构,重建测试数据库
rake db:test:load schema.rb重建测试数据库
rake db:test:prepare 检查挂起的数据库变更migration,将变化加载到测试数据库
rake db:test:purge 清空测试数据库

如何编写并进行单元测试

在使用rails g model user或者rails g scaffold user的时候,会自动在test/unit文件夹中创建model对应的单元测试文件。

test/unit/user_test.rb
  1. require 'test_helper'
  2. class UserTest < ActiveSupport::TestCase
  3. test "email invalid" do
  4. user = users(:one)
  5. assert user.invalid?, "email invalid"
  6. end
  7. test "email invalid two" do
  8. user=users(:two)
  9. assert user.invalid?
  10. end
  11. test "password do not match" do
  12. user =users(:three)
  13. assert user.invalid?
  14. end
  15. test "all fields are valid" do
  16. user=User.new(:nickname=>"nickname",:email=>"sdf@13123.xo",
  17. :password=>"123456",
  18. :password_confirmation=>"123456")
  19. assert user.valid?
  20. end
  21. test "password and password_confirmation do not match" do
  22. user = User.new(:nickname=>"asdf",:email=>"asdfasdf",:password=>"123",
  23. :password_confirmation=>"234")
  24. assert user.invalid?
  25. end
  26. end

app/model/user.rb

  1. class User < ActiveRecord::Base
  2. attr_accessible :email, :nickname, :password, :password_confirmation
  3. attr_accessor :password, :password_confirmation
  4. validates :password, :confirmation => true
  5. validates :password_confirmation, :presence => true
  6. validates :email, :presence => true, :uniqueness => true, :format => { :with => /^\w+@\w+\.\w+$/ },
  7. :length => { :maximum => 40 }
  8. validates :nickname, :presence => true, :length => { :in =>1..30 }
  9. end

test/fixtures/users.yml

  1. one:
  2. nickname: nickname1
  3. email: invalidemail
  4. two:
  5. nickname: nickname2
  6. email: invalideamil@
  7. three:
  8. nickname: nickname3
  9. email: validemail@123.com
  10. four:
  11. nickname: nickname4
  12. email: validemail@baidu.com
生成的单元测试文件
test/unit/user_test.rb
  1. require 'test_helper'
  2. class UserTest < ActiveSupport::TestCase
  3. end

类名为model名+Test,继承自ActiveSupport::TestCase。

我们先来写一个测试。
  1. require 'test_helper'
  2. class UserTest < ActiveSupport::TestCase
  3. test "email invalid" do
  4. user = users(:one)
  5. assert user.invalid?, "email invalid"
  6. end
  7. end

针对邮件格式的测试,首先加载模拟数据users(:one),然后用断言assert验证user.email是否无效。也就是验证我们在user的model中写的validates是否有效。也可以不加载模拟数据,自己创建实体数据。

  1. require 'test_helper'
  2. class UserTest < ActiveSupport::TestCase
  3. test "email invalid" do
  4. user = User.new(:email=>"asdf", :nickname=>"nickname")
  5. assert user.invalid?, "email invalid"
  6. end
  7. end

执行单个文件中的测试。

  1. ruby -Itest test/unit/category_test.rb

也可以使用

  1. rake test TEST=test/unit/category_test.rb

如果想执行全部的单元测试,就执行下面的命令。

  1. rake test:units

执行的结果如下。

  1. ➜  blog git:(develop) rake test TEST=test/unit/user_test.rb
  2. Run options:
  3. # Running tests:
  4. .....
  5. Finished tests in 0.539807s, 9.2626 tests/s, 9.2626 assertions/s.
  6. 5 tests, 5 assertions, 0 failures, 0 errors, 0 skips

在Running tests:下面是5个. ,每个.对应一个测试,对应一个test...do。.代表测试通过,如果是F代表测试失败,E代表抛出异常。

再下面是花费的时间,已经每秒可以执行的测试个数,每秒可以执行断言assert的个数。

再下面是一些统计信息,测试个数,断言个数,失败个数,错误个数,跳过的个数。

断言assert

断言是测试常用的一个方法。

常用的端阳包括

  • boolean的断言assert user.valid?。
  • equal的断言assert_equal(obj1, obj2), assert_not_equal(obj1, obj2)。
  • nil的断言assert_nil(obj),assert_not_nil(obj)。
  • same的断言assert_same(obj1, obj2),assert_not_same(obj1, obj2)。

更多的断言可以去http://guides.rubyonrails.org/testing.html查看。

参考文档

1.http://guides.rubyonrails.org/testing.html

转载于:https://blog.51cto.com/virusswb/1075391

Rails测试《二》单元测试unit test相关推荐

  1. 自动化测试(二)01-前端测试分为单元测试、集成测试和E2E测试 测试工具对比-适合TDD或 BDD、断言、异步测试 测试工具的类型

    自动化测试(二)01-前端测试分为单元测试.集成测试和E2E测试 & 测试工具对比-适合TDD或 BDD.断言.异步测试 & 测试工具的类型 前端自动化测试 测试是一个庞大的主题,包括 ...

  2. 计算机应用word单元测试2,(计算机应用基本技能测试二.doc

    (计算机应用基本技能测试二 计算机应用基本技能测试 一 第一题 在Word环境下, 输入图片上的文字,制作表格,并编辑排版出图片所给的效果( 25 分) .其中: 1. 标题是三号黑体字且居中:文字是 ...

  3. Rails测试《一》fixtures简介

    简介 每个rails应用都包括三个环境: 生产环境 开发环境 测试环境 我们的测试就是跑在测试环境,如果测试涉及数据库,会在测试数据库进行操作.这样不会对生产环境和开发环境的数据造成影响. 我们先使用 ...

  4. 自动化测试(二) 单元测试junit的Test注解突然不能使用原因以及解决方案

    自动化测试(二) 单元测试junit的Test注解突然不能使用原因以及解决方案 参考文章: (1)自动化测试(二) 单元测试junit的Test注解突然不能使用原因以及解决方案 (2)https:// ...

  5. (保守群组测试 非保守群组测试 二次重复测试 自适应二次重复测试)四种群体测试的C++代码

    目录 原理 保守组检测 非保守组检测 二次重复测试 自适应二次重复测试 四种测试方法的核心代码 保守群组测试 非保守群组测试 二次重复测试与自适应二次重复测试 测试代码 参考文献 原理 假设该病在人群 ...

  6. 微信小程序 - 二维码数据解析,如何扫码进入开发版测试二维码数据

    1.生成二维码 在小程序开发中,经常需要用到通过分享小程序二维码,进行扫码进入小程序. 官方文档 生成小程序二维码接口,这个生成接口可以放置服务器使用. page:是扫码之后需要打开的小程序页面 sc ...

  7. APP兼容性测试 (二) 最新 iPhone 机型分辨率总结

    APP兼容性测试 (二) 最新 iPhone 机型分辨率总结 </h1><div class="clear"></div><div cla ...

  8. c语言printf snm,甘肃三校生高考模拟试题专业基础知识测试(二)

    甘肃省普通高等教育对口招收中等职业学校学生招生考试模拟试题专业基础测试(二)(信息技术类)班级:学号:姓名:成绩: <计算机网络基础>部分 一.选择题:(本题包括15小题,每小题2分,共3 ...

  9. 《程序猿和攻城狮》 --南京大学软件学院导学课 测试二答案

    中国大学MOOC <程序猿和攻城狮> --南京大学软件学院导学课 测验与作业 软件工程师和软件工程团队 测试二 软件工程最为本质的工作是 ___ ? 下面哪一个不是判定软件产品成功的必要条 ...

  10. MongoDB过关测试二

    MongoDB过关测试二 一. 其它 (共27题,135分) 1.创建数据库mydb,给指定的集合添加文档. db.students.insertMany([ {"_id":&qu ...

最新文章

  1. 跳过IE7beta2版的XP正版检测!
  2. 请问有办法加速TTS的反应时间吗
  3. Redis3.0 集群
  4. win10 GCC 安装
  5. 通过NodeJS自动生成的MySQL的REST风格API
  6. c语言车牌号5位数,为何有的车牌是五位数字,有的加英文字母?终于知道原因了!...
  7. 台达plc接线图实物_台达PLC dvp-14es 外部电路怎么接线
  8. 为啥俺要写博客--凭什么?
  9. Poi Excel 设置列宽计算公式
  10. 美国enom域名的优势
  11. 关于PostgreSQL软件安装后出现解决the application server could not be contect ed错误的方法
  12. asp.net 面试题目
  13. solidworks批量图号分离_SolidWorks2014基于宏实现快速图号名称分离
  14. 【MySql】MySQL排序分页查询数据顺序错乱的原因和解决办法
  15. HTML音频视频标签
  16. 单词1(-cess -ceed -cede -gress -gred -grad)=to go、go
  17. OSI和TCP/IP网络参考模型傻傻分不清?图解和各层作用详细说明
  18. C语言小游戏: 2048.c
  19. 阿里云独享虚拟主机,安装多个二级域名的网站
  20. Linux 下进程相关的常用命令汇总

热门文章

  1. QT4C-Windows自动化测试框架正式开源
  2. 自动化测试工具Selenium
  3. Spring Boot单元测试入门实战之关于JUnit
  4. 小米电视2+android,真实体验小米电视2方便安装第三方软件
  5. python量化常用_简单介绍下量化分析的常用库TA-lib
  6. python中构造方法和析构方法的区别_基于Python构造方法与析构方法的研究
  7. 电脑切换窗口快捷键_计算机二级常用快捷键
  8. java 加载shellcode_MSF-Shellcode生成和使用
  9. PD2SE-Net:植物病害诊断和严重性评估网络(首次)
  10. ordfilt2非线性滤波器