一分钟了解ruby中的单测

之前用gtest写过很多c++的单测case, 对gtest的强大和灵活印象深刻;最近需要用ruby写一个小工具, 接触了下ruby, 写了代码就要写单测啊(好的单测确实对代码的健壮性和正确性保证上太重要了)

简单搜了下发现 单测是ruby的一部分, 而不像c++等要引用gtest等三方库,简单可依赖,  简单写个例子

代码:

module Brtest
    class Myfile
       def write(theFile,theCont)
            _fileName=File.dirname(__FILE__)+"/tmp/"+theFile
            Dir.mkdir(File.dirname(_fileName)) unless File.exist?(File.dirname(_fileName))
            aFile = File.new(_fileName,"w")
            aFile.puts theCont
            aFile.close
       end
    end
end

对应单测, 放在test目录下:

require "test/unit"
require File.dirname(__FILE__)+"/../file"
include Brtest

require "Watir-webdriver"
include Watir

class TestFile < Test::Unit::TestCase
   def test_write
      _file = Myfile.new
      _file.write("test_file","testcontent")
   end
   def test_write_html
      br = Watir::Browser.new :ie
      br.goto "baidu.com"
      _file = Myfile.new
      _file.write("test_file_html",br.html)
      br.close
   end

end 

运行结果:

这个单测其实还有个问题, 没有清理单测生成的文件; 正确的做法应该是生成了测试文件, case中检查文件的内容是否符合预期, 如果符合 就删掉, 不符合则失败。  我觉得实际使用中可以灵活处理, 比如我的目的就是验证我的代码是可用的, 而不是把case作为每次回归来使用的, 可以不严格按照要求。

另外附上常用的断言(参数msg表示测试失败时显示的消息):

assert(boolean, [msg])
assert_equal (expected, actual, [msg])
assert_not_equal (expected, actual, [msg])
assert_match (pattern, string, [msg])
assert_no_match (pattern, string, [msg])
assert_nil (object, [msg])
assert_not_nil (object, [msg])
assert_instance_of (class, object, [])
assert_kind_of (class, object, [])
assert_ralse (Exception, …) {block}
assert_nothing_ralsed (Exception, …) {block}

时间: 2024-11-03 22:59:39

一分钟了解ruby中的单测的相关文章

Ruby中的钩子方法详解

  这篇文章主要介绍了Ruby中的钩子方法详解,本文讲解了什么是钩子方法.included.Devise中的 included.extended.ActiveRecord中的 extended.prepended.inherited等内容,需要的朋友可以参考下 Ruby的哲学理念是基于一个基本的要素,那就是让程序员快乐.Ruby非常注重程序员的快乐,并且也提供了许多不同的方法来实现它. 它的元编程能力能够让程序员编写在运行时动态生成的代码.它的线程功能使得程序员有一种优雅的的方式编写多线程代码.

Ruby中操作字符串的一些基本方法

  这篇文章主要介绍了Ruby中操作字符串的一些基本方法,包括对字符串的压缩和解压缩等处理,需要的朋友可以参考下 在Ruby中的String对象持有和操纵的任意序列的一个或多个字节,通常表示人类语言的字符表示. 简单的字符串文本括在单引号(单引号字符).引号内的文本的字符串值: ? 1 'This is a simple Ruby string literal' 如果需要内放置一个单引号,单引号的字符串文字,在它前面加上一个反斜杠Ruby解释器不认为终止字符串: ? 1 'Won't you r

【Q&amp;A系列1】单测集成常见Q&amp;A

单测集成常见问题总结: Q1:邮件有哪几种,发送的规则是什么,是否可以配置? A1:邮件分五种:项目实时构建报告发给代码提交人,主干代码模块构建报告发给模块负责人,项目单元测试构建日报和周报发给项目组成员(PM,开发,测试):主干代码模块周报发送给模块负责人,主干频率为每天检查CI,分支频率默认每小时检查CI(频率可配置).分支的通知配置可到项目详情页进行勾选配置(如下图),目前构建失败暂时不发通知. Q2:代码覆盖率是怎么统计的? A2:覆盖率分全量覆盖率和增量覆盖率:全量覆盖率=(被单元测试

Ruby中操作字符串的一些基本方法_ruby专题

 在Ruby中的String对象持有和操纵的任意序列的一个或多个字节,通常表示人类语言的字符表示. 简单的字符串文本括在单引号(单引号字符).引号内的文本的字符串值: 'This is a simple Ruby string literal' 如果需要内放置一个单引号,单引号的字符串文字,在它前面加上一个反斜杠Ruby解释器不认为终止字符串: 'Won\'t you read O\'Reilly\'s book?' 反斜杠也可以转义另一个反斜杠,这样第二个反斜杠本身不是解释为转义字符. 以下是

Ruby中Time对象的常用函数总结_ruby专题

时间对象. Time.now返回当前时间. 1.Time.at Time.at(time[, usec]) 返回time所指时间的Time对象. time可以是Time对象,也可以是表示自起算时间以来的秒数的整数或浮点数. 若浮点精度不够时,可以使用usec. 它将返回time +(usec/1000000)所表示的时间. 此时,time和usec都必需是整数. 生成的Time对象将使用地方时的时区. 2.Time.gm.Time.utc Time.gm(year[, mon[, day[, h

Ruby中实现统计文件行数、单词数和字符数_ruby专题

在Ruby中我们定义一个wc方法,用来统计文件中出现的文本行数.单词数和字符数,ruby代码程序如下: 复制代码 代码如下: def wc(filename)   nline = nword = nchar = 0   File.open(filename) do |io|     io.each_line do |line|       words = line.split(/\s+/).reject{|w| w.empty? }       #本例中使用了split方法分割单词,当行首有空白

Ruby中的Mechanize的使用教程_ruby专题

Ruby中实现网页抓取,一般用的是mechanize,使用非常简单. 安装 复制代码 代码如下: sudo gem install mechanize 抓取网页 复制代码 代码如下: require 'rubygems' require 'mechanize' agent = Mechanize.new page = agent.get('http://google.com/') 模拟点击事件 复制代码 代码如下: page = agent.page.link_with(:text => 'Ne

ruby中如何调用与局部变量同名的私有方法

    如果ruby中一个局部变量名和私有方法名同名的话,默认该名称被解释为变量而不是方法: x=10; def x;puts "what?" end 当你输入x实际不能执行x方法.解释器只把x解释为变量.而且undef只能对方法而不能对变量下手,所以undef x仍然不行,变量还在那里!一种解决方法是将x方法转换为一个method,然后调用: x_f = method(:x) x_f[] 或者还有一种方法,就是方法别名!你可以指定x的一个别名,这时x肯定会解释为方法: alias n

Excel表格中使用单变量求解分析数据的方法

  Excel表格中使用单变量求解分析数据的方法           1.打开工作簿,创建工作表,并在工作表中输入数据,同时在B10单元格中输入公式"=SUM(B3:B9)"计算费用总和,如图1所示. 图1 创建工作表 2.在"数据"选项卡的"数据工具"组中单击"模拟分析"按钮,在打开的下拉列表中选择"单变量求解"选项,如图2所示. 图2 选择"单变量求解"选项 3.打开"单变