Ruby单元测试框架TestUnit的替代者MiniTest介绍_ruby专题

MiniTest 是新一代的 Ruby 测试框架,它已经成为 Ruby 1.9 的内置测试框架,据说它也将成为Rails 4的默认测试框架,可谓前途一片光明。

MiniTest 为什么成为最新 Ruby 和 Rails 的首选,它有哪些吸引人的东西呢?

Ruby 1.8时代,Ruby 和 Rails 的默认测试框架都是 TestUnit,TestUnit 历史悠久,它最大的问题是太慢,太臃肿了,它包含了一堆现在很少使用的第三方库,比如GTk v1, GTk v2, FxRuby,另外一个大问题的是它缺乏一些基本的测试特性,比如 spec DSL的测试风格,比如 mock 支持等等。

MiniTest 相当于对 TestUnit 做了一次大的重构翻新,它继承了 TestUnit 大部分用法,消除 TestUnit 中不恰当的依赖,另外增加了基本的测试特性,比如 spec 和 mock等,整体上变得相当快速,简单整洁。

在 Ruby 和 Rails 的世界,有一个测试框架 Rspec 使用也是非常广泛的,甚至目前使用广泛程度超过 TestUnit 和 MiniTest,它为什么没有成为默认框架呢?我想 MiniTest 相对于 Rspec 最大的优势是简单和延续性,Rspec 相比 MiniTest 要庞大复杂得多,当然功能也更强大,对于内置 Ruby 的类库来说,还是简单和保持延续(相对 TestUnit)更有优势。对于 Rails 来说,Rails 之父 DHH 和 Rspec 一直对不上眼,我想是 Rails 最终选择 MiniTest 最大的原因,哈哈。

MiniTest 使用示例

如果你用过 TestUnit,MiniTest 使用非常简单,下面是一个测试的 Hello World

复制代码 代码如下:

class HelloWold
  def get_word
    "Hello World!"
  end
end

测试代码

复制代码 代码如下:

require 'minitest/autorun'

class HelloWoldTest < MiniTest::Unit::TestCase
  def test_get_word
    assert_equal "Hello World!", HelloWold.new.get_word
  end
end

测试代码, spec风格

复制代码 代码如下:

require 'minitest/autorun'

describe HelloWold do
  it "should return hello world" do
    HelloWold.new.get_word.must_equal "Hello World!"
  end
end

如果要在 Rails 项目使用 MiniTest,可以使用 gem minitest-rails,使用 minitest-rails 之后,rails generator 生成的 test 就都转换为 minitest 风格代码。

总结

MiniTest 相当简单快速,它延续 TestUnit用法,上手非常快,同时它又提供了一些非常棒的特性,试用下来觉得非常不错,难怪它成为最新 Ruby 和 Rails 的首选,我打算今后就用它了。

时间: 2024-08-01 12:43:56

Ruby单元测试框架TestUnit的替代者MiniTest介绍_ruby专题的相关文章

ruby执行周期性任务的三种gem介绍_ruby专题

1.whenever 首先,whenever是基于linux的cron服务的,所以,在windows平台上没有直接的方法使用该gem.whenever严格来说应该算一个cron的翻译器,将ruby代码翻译为cron脚本,从而将周期性任务转交给cron实际去完成.对于精通cron的shell程序员来说可能不值一提,但对rubyist却不是.首先,我们可以使用ruby语言来书写任务代码,在ruby层面上控制代码,避免了和一些shell脚本的切换:另外,cron命令很强大,但我总是记不住它的命令参数,

Ruby微信开发的几个开源项目介绍_ruby专题

最近陆续有不少用Rails开发微信项目的朋友在Github上开始使用weixin_rails_middleware.weixin_authorize,也不少人谈到Ratchet,春节开始到现在,一直有做微信的开发,现在在论坛上发布出来,希望让更多人知道这些gem的存在,更快速的完成你们手中的任务. 1.一(两)条命令搭建Rails微信版本 按照最简洁的速度,10分钟可以跑起一个微信的项目: https://github.com/lanrion/weixin_rails_middleware 自动

Ruby中的类Google Map/Reduce框架Skynet介绍_ruby专题

Skynet是一个很响亮的名字,因为它是阿诺施瓦辛格主演的经典系列电影<终结者>里面的统治人类的超级计算机网络.不过本文的Skynet没这么恐怖,它是一个ruby版本的Google Map/Reduce框架的名字而已. Google的Map/Reduce框架实在太有名气了,他可以把一个任务切分为很多份,交给n台计算机并行执行,返回的结果再并行的归并,最后得到运算的结果.据说Google一个搜索结果会Map到7000台服务器并行执行,这么多么可怕的分布式运算能力阿!有了Map/Reduce,程序

对优化Ruby on Rails性能的一些办法的探究_ruby专题

1.导致你的 Rails 应用变慢无非以下两个原因: 在不应该将 Ruby and Rails 作为首选的地方使用 Ruby and Rails.(用 Ruby and Rails 做了不擅长做的工作) 过度的消耗内存导致需要利用大量的时间进行垃圾回收. Rails 是个令人愉快的框架,而且 Ruby 也是一个简洁而优雅的语言.但是如果它被滥用,那会相当的影响性能.有很多工作并不适合用 Ruby and Rails,你最好使用其它的工具,比如,数据库在大数据处理上优势明显,R 语言特别适合做统计

Windows下Ruby+Watir自动化测试的环境搭建及数据读取_ruby专题

Watir的使用环境搭建 1.watir环境工具安装包: 1) ruby186-26.exe下载地址:http://files.rubyforge.vm.bytemark.co.uk/rubyinstaller/ 2) watir-1.5.2.gem下载地址:http://rubyforge.org/frs/?group_id=104&release_id=28016 3)rubygems-update-1.3.7.gem下载地址:http://rubyforge.org/frs/?group_

Windows下Ruby on Rails开发环境安装配置图文教程_ruby专题

本文详细介绍如何在Windows配置Ruby on Rails 开发环境,希望对ROR初学者能有帮助. 一.下载并安装Ruby Windows下安装Ruby最好选择 RubyInstaller(一键安装包). 下载地址: http://rubyforge.org/frs/?group_id=167 . 我们这里下载目前较新的rubyinstaller-1.9.3-p0.exe 一键安装包.这个安装包除了包含ruby本身,还有许多有用的扩展(比如gems)和 帮助文档. 双击安装,安装过程出现如下

Ruby元编程之梦中情人method_missing方法详解_ruby专题

我最近读了些文章(比如这篇),宣传在 Ruby 里使用 method_missing 的. 很多人都与 method_missing 干柴烈火,但在并没有小心处理彼此之间的关系.所以,我想来探讨一下这个问题: ** 我该怎么用 method_missing ** 什么时候该抵挡 method_missing 的诱惑 首先,永远不要在还没花时间考虑你用得够不够好之前,就向 method_missing 的魅力屈服.你知道,在日常生活中,很少会让你以为的那样亟需 method_missing: 日常

Ruby中的反射(Reflection)应用实例_ruby专题

在Java语言中,提供了发射机制,通过发射机制可以通过字符串构造出这个对象,可以获取对象的所有方法(包括私有方法),可以调用私有方法,可以更改成员变量的值(包括私有的成员变量).Ruby也是面向对象的高级语言,当然也提供了反射机制,今天我们讨论通过类名称构造类对象的功能. 一.通过类名称构造类对象 我们先看普通的构造: 复制代码 代码如下: module ModuleA     #the class name, later we will use it to create the corresp

Ruby 中一些百分号(%)的用法小结_ruby专题

%Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") 复制代码 代码如下: >> %Q(Joe said: "Frank said: "#{what_frank_said}"")=> "Joe said: "Frank said: "Hello!""" (...)也可用其他非数字字母的符号或成对的符号代替