zoukankan      html  css  js  c++  java
  • 4-4 集成测试练习,和测试基础知识(guide)。

    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 

    断言

    作用

    assert( test, [msg] )
                 

    确保 test 是真值。

    assert_not( test, [msg] )
                 

    确保 test 是假值。

    assert_equal( expected, actual, [msg] )
                 

    确保 expected == actual 成立。

    assert_not_equal( expected, actual, [msg] )
                 

    确保 expected != actual 成立。

    assert_same( expected, actual, [msg] )
                 

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

    assert_not_same( expected, actual, [msg] )
                 

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

    assert_nil( obj, [msg] )
                 

    确保 obj.nil? 成立。

    assert_not_nil( obj, [msg] )
                 

    确保 obj.nil? 不成立。

    assert_empty( obj, [msg] )
                 

    确保 obj 是空的。

    assert_not_empty( obj, [msg] )
                 

    确保 obj 不是空的。

    assert_match( regexp, string, [msg] )
                 
    确保字符串匹配正则表达式。
                 
    assert_no_match( regexp, string, [msg] )
                 
    确保字符串不匹配正则表达式。
                 
    assert_includes( collection, obj, [msg] )
                 

    确保 obj collection 中。

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

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

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

        $ bin/rails test test/models/article_test.rb
    
    也可以运行测试用例中特定的测试方法:指定 -n --name 旗标和测试方法的名称
    也可以运行某一行的测试,方法是指定行号。
    也可以运行整个目录的测试:rails test test/controllers
    还有很多功能详细见文档。 也可运行帮助 rails test -h
    测试数据库在config/database.yml中配置。

    固件详解: 

    在 Rails 中,测试数据由固件(fixture)提供。关于固件的全面说明,参见 API 文档。

    http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html

    固件代指示例数据,在运行测试之前,使用预先定义好的数据填充测试数据库

    固件与所用的数据库没有关系,使用 YAML 格式编写。一个模型有一个固件文件。

    保存在test/fixtures目录中。

    如果涉及到关联,定义一个指向其他固件的引用即可

    例如,下面的固件针对 belongs_to/has_many 关联:

    # In fixtures/categories.yml  

    about:

    name: About

    # In fixtures/articles.yml

    first:

    title: Welcome to Rails!

    body: Hello world!

    category: about

    注意,在 fixtures/articles.yml 文件中,first 文章的 category 是 about,

    这告诉 Rails,要加载 fix- tures/categories.yml 文件中的 about 分类。

    在创建固件关联时,引用的时另一个固件的名称,而不是id属性。

    相关文档:http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html 

    可以在YAML格式的固件中,使用Ruby代码协助生成数据,如1000.times do...end

    固件是Active Record对象,所以在测试中可以直接访问。 

    返回 david 固件对应的 User 对象: users(:david)

    返回一个数组,包含 david 和 steve 两个固件: users(:david, :steve) 

    18.4 模型的单元测试。test_unit:model

    用于测试应用中的各个模型,test/models目录中。Rails提供了生成器generation.

    bin/rails generate test_unit:model article title:string body:text

    Running via Spring preloader in process 82152

    create test/models/article_test.rb 生成测试文件。

    create test/fixtures/articles.yml 生成固件,内有2个数据对象

    18.5 系统测试

    系统测试用于测试用户与应用的交互,可以在真正的浏览器中运行,也可以在无界面浏览器中运行。

    系统测试存放在test/system 目录中。Rails 为创建系统测试骨架提供了一个生成器:

    $ bin/rails generate system_test users 

    invoke test_unit

    create test/system/users_test.rb

    运行系统测试: $ bin/rails test:system

     

    18.6集成测试integration_test 

    $ bin/rails generate integration_test user_flows 

    exists test/integration/

    create test/integration/user_flows_test.rb

    集成测试有大量可用的辅助方法。分3类:

    集成测试运行程序的说明参阅 ActionDispatch::Integration::Runner 模块的文档

    执行请求的方法参见 ActionDispatch::Integration::RequestHelpers 模块的文档 如果需要修改会话或集成测试的状态,参阅 ActionDispatch::Integration::Session 类的文档

    18.7 为控制器编写功能测试

    在 Rails 中,测试控制器各动作需要编写功能测试(functional test)。

    控制器负责处理应用收到的请求,然后使用视图渲染响应。

    功能测试用于检查动作对请求的处理,以及得到的结果或响应(某些情况下是 HTML 图)。

    请求是否成功;

    是否重定向到正确的页面; 用户是否通过身份验证; 是否把正确的对象传给渲染响应的模板; 是否在视图中显示相应的消息;

    测试还有很多,具体参看guide文档。 

  • 相关阅读:
    背水一战 Windows 10 (90)
    背水一战 Windows 10 (89)
    背水一战 Windows 10 (88)
    背水一战 Windows 10 (87)
    背水一战 Windows 10 (86)
    背水一战 Windows 10 (85)
    背水一战 Windows 10 (84)
    背水一战 Windows 10 (83)
    背水一战 Windows 10 (82)
    背水一战 Windows 10 (81)
  • 原文地址:https://www.cnblogs.com/chentianwei/p/8718546.html
Copyright © 2011-2022 走看看