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文档。 

  • 相关阅读:
    LeetCode-46. Permutations
    LeetCode-40. Combination Sum II
    LeetCode-39. Combination Sum
    剑指offer-数组中的逆序对
    LeetCode-295. Find Median from Data Stream
    LeetCode-268. Missing Number
    LeetCode-515. Find Largest Value in Each Tree Row
    GIS技术在采矿与勘探中的应用
    JavaScript 跨域总结与解决办法giserdqy.com
    JavaScript 跨域总结与解决办法giserdqy.com
  • 原文地址:https://www.cnblogs.com/chentianwei/p/8718546.html
Copyright © 2011-2022 走看看