minitest/{test,spec,mock,benchmark}

主页

github.com/minitest/minitest

错误

github.com/minitest/minitest/issues

rdoc

docs.seattlerb.org/minitest

clog

github.com/minitest/minitest/blob/master/History.rdoc

vim

github.com/sunaku/vim-ruby-minitest

emacs

github.com/arthurnn/minitest-emacs

描述:

minitest 提供了一整套测试工具,支持 TDD、BDD、模拟和基准测试。

"I had a class with Jim Weirich on testing last week and we were
 allowed to choose our testing frameworks. Kirk Haines and I were
 paired up and we cracked open the code for a few test
 frameworks...

 I MUST say that minitest is *very* readable / understandable
 compared to the 'other two' options we looked at. Nicely done and
 thank you for helping us keep our mental sanity."

-- Wayne E. Seguin

minitest/test 是一个小型且速度极快的单元测试框架。它提供了丰富的断言集,使您的测试干净且可读。

minitest/spec 是一个功能完整的规范引擎。它挂钩到 minitest/test 并无缝地将测试断言桥接到规范期望。

minitest/benchmark 是一种以可重复的方式断言算法性能的绝佳方法。现在您可以断言您的新手同事不会用指数算法替换您的线性算法!

minitest/mock 由 Steven Baker 开发,是一个非常小的模拟(和桩)对象框架。

minitest/pride 展示了对测试的自豪感,并为您的测试输出添加了颜色。我想这也是一个如何编写 IO 管道的示例。:P

minitest/test 旨在为需要一组最少的方法来引导工作测试套件的语言实现者提供一个干净的实现。例如,测试用例发现没有涉及任何魔法。

"Again, I can't praise enough the idea of a testing/specing
 framework that I can actually read in full in one sitting!"

-- Piotr Szotkowski

与 rspec 比较

rspec is a testing DSL. minitest is ruby.

-- Adam Hawkins, "Bow Before MiniTest"

minitest 不会重新发明 ruby 已经提供的任何东西,例如:类、模块、继承、方法。这意味着您只需学习 ruby 即可使用 minitest,并且您所有的常规 OO 实践(如提取方法重构)仍然适用。

特性/问题:

原理:

请参阅 design_rationale.rb,了解规范和测试在 minitest 中是如何工作的。

概要:

假设您要测试以下类

class Meme
  def i_can_has_cheezburger?
    "OHAI!"
  end

  def will_it_blend?
    "YES!"
  end
end

单元测试

将您的测试定义为以 test_ 开头的方法。

require "minitest/autorun"

class TestMeme < Minitest::Test
  def setup
    @meme = Meme.new
  end

  def test_that_kitty_can_eat
    assert_equal "OHAI!", @meme.i_can_has_cheezburger?
  end

  def test_that_it_will_not_blend
    refute_match /^no/i, @meme.will_it_blend?
  end

  def test_that_will_be_skipped
    skip "test this later"
  end
end

规范

require "minitest/autorun"

describe Meme do
  before do
    @meme = Meme.new
  end

  describe "when asked about cheeseburgers" do
    it "must respond positively" do
      _(@meme.i_can_has_cheezburger?).must_equal "OHAI!"
    end
  end

  describe "when asked about blending possibilities" do
    it "won't say no" do
      _(@meme.will_it_blend?).wont_match /^no/i
    end
  end
end

有关匹配器支持,请查看

基准测试

将基准测试添加到您的测试中。

# optionally run benchmarks, good for CI-only work!
require "minitest/benchmark" if ENV["BENCH"]

class TestMeme < Minitest::Benchmark
  # Override self.bench_range or default range is [1, 10, 100, 1_000, 10_000]
  def bench_my_algorithm
    assert_performance_linear 0.9999 do |n| # n is a range value
      @obj.my_algorithm(n)
    end
  end
end

或者将它们添加到您的规范中。如果您使基准测试成为可选的,则需要将基准测试包装在条件中,因为这些方法不会被定义。在 minitest 5 中,描述名称需要与 /Bench(mark)?$/ 匹配。

describe "Meme Benchmark" do
  if ENV["BENCH"] then
    bench_performance_linear "my_algorithm", 0.9999 do |n|
      100.times do
        @obj.my_algorithm(n)
      end
    end
  end
end

输出类似于

# Running benchmarks:

TestBlah      100     1000    10000
bench_my_algorithm     0.006167        0.079279        0.786993
bench_other_algorithm  0.061679        0.792797        7.869932

输出是制表符分隔的,以便于粘贴到电子表格中。

模拟

使用 Fowler & Meszaros 在 www.martinfowler.com/bliki/TestDouble.html 处的术语定义的模拟和桩。

“模拟会预先编程期望,这些期望构成了它们预期接收的调用的规范。如果它们收到它们不期望的调用,它们可以抛出异常,并且在验证期间会进行检查以确保它们得到了它们期望的所有调用。”

class MemeAsker
  def initialize(meme)
    @meme = meme
  end

  def ask(question)
    method = question.tr(" ", "_") + "?"
    @meme.__send__(method)
  end
end

require "minitest/autorun"

describe MemeAsker, :ask do
  describe "when passed an unpunctuated question" do
    it "should invoke the appropriate predicate method on the meme" do
      @meme = Minitest::Mock.new
      @meme_asker = MemeAsker.new @meme
      @meme.expect :will_it_blend?, :return_value

      @meme_asker.ask "will it blend"

      @meme.verify
    end
  end
end

多线程和模拟

Minitest 模拟不支持多线程。如果它可以工作,那就很好,如果它不能工作,您可以使用常规的 ruby 模式和工具(如局部变量)。以下是一个断言线程内代码运行的示例

def test_called_inside_thread
  called = false
  pr = Proc.new { called = true }
  thread = Thread.new(&pr)
  thread.join
  assert called, "proc not called"
end

使用 Fowler & Meszaros 在 www.martinfowler.com/bliki/TestDouble.html 处的术语定义的模拟和桩。

“桩为测试期间的调用提供罐头答案”。

Minitest 的 stub 方法会在块的持续时间内覆盖单个方法。

def test_stale_eh
  obj_under_test = Something.new

  refute obj_under_test.stale?

  Time.stub :now, Time.at(0) do   # stub goes away once the block is done
    assert obj_under_test.stale?
  end
end

关于桩的一个注意事项:为了桩一个方法,该方法必须在桩之前实际存在。使用单例方法创建一个新的不存在的方法

def obj_under_test.fake_method
  ...
end

运行您的测试

理想情况下,您将使用 rake 任务来运行您的测试(请参见下文),无论是零碎地运行还是一次性运行。但是!您不必这样做

% ruby -Ilib:test test/minitest/test_minitest_test.rb
Run options: --seed 37685

# Running:

...................................................................... (etc)

Finished in 0.107130s, 1446.8403 runs/s, 2959.0217 assertions/s.

155 runs, 317 assertions, 0 failures, 0 errors, 0 skips

有运行时选项可用,既来自 minitest 本身,也通过插件提供。要查看它们,只需使用 --help 运行即可

% ruby -Ilib:test test/minitest/test_minitest_test.rb --help
minitest options:
    -h, --help                       Display this help.
    -s, --seed SEED                  Sets random seed. Also via env. Eg: SEED=n rake
    -v, --verbose                    Verbose. Show progress processing files.
    -n, --name PATTERN               Filter run on /regexp/ or string.
    -e, --exclude PATTERN            Exclude /regexp/ or string from run.

Known extensions: pride, autotest
    -p, --pride                      Pride. Show your testing pride!
    -a, --autotest                   Connect to autotest server.

Rake 任务

您可以通过将此添加到您的 Rakefile 来设置一个 rake 任务来运行您的所有测试

require "minitest/test_task"

Minitest::TestTask.create # named test, sensible defaults

# or more explicitly:

Minitest::TestTask.create(:test) do |t|
  t.libs << "test"
  t.libs << "lib"
  t.warning = false
  t.test_globs = ["test/**/*_test.rb"]
end

task :default => :test

每个都将生成 4 个任务

rake test          :: Run the test suite.
rake test:cmd      :: Print out the test command.
rake test:isolated :: Show which test files fail when run separately.
rake test:slow     :: Show bottom 25 tests sorted by time.

Rake 任务变量

您可以向 rake 提供许多变量来修改运行。

MT_LIB_EXTRAS :: Extra libs to dynamically override/inject for custom runs.
N             :: -n: Tests to run (string or /regexp/).
X             :: -x: Tests to exclude (string or /regexp/).
A             :: Any extra arguments. Honors shell quoting.
MT_CPU        :: How many threads to use for parallel test runs
SEED          :: -s --seed Sets random seed.
TESTOPTS      :: Deprecated, same as A
FILTER        :: Deprecated, same as A

编写扩展

要定义插件,请将名为 minitest/XXX_plugin.rb 的文件添加到您的项目/gem 中。该文件必须可以通过 ruby 的 LOAD_PATH(通过 rubygems 或其他方式)发现。Minitest 将使用 Gem.find_files 查找并要求该文件。然后,它将在启动期间尝试调用 plugin_XXX_init。选项处理器还将尝试调用 plugin_XXX_options,传递 OptionParser 实例和当前选项哈希。这使您可以注册自己的命令行选项。这是一个完全虚假的示例

# minitest/bogus_plugin.rb:

module Minitest
  def self.plugin_bogus_options(opts, options)
    opts.on "--myci", "Report results to my CI" do
      options[:myci] = true
      options[:myci_addr] = get_myci_addr
      options[:myci_port] = get_myci_port
    end
  end

  def self.plugin_bogus_init(options)
    self.reporter << MyCI.new(options) if options[:myci]
  end
end

添加自定义报告器

Minitest 使用复合报告器来使用多个报告器实例输出测试结果。您可以在 init_plugins 阶段将新报告器添加到复合报告器中。正如我们在上面的 plugin_bogus_init 中看到的那样,您只需通过 << 将您的报告器实例添加到复合报告器即可。

AbstractReporter 定义了报告器的 API。您可以对其进行子类化并覆盖您想要实现所需行为的任何方法。

start

在运行开始时调用。

record

为每个结果(通过或其他方式)调用。

report

在运行结束时调用。

passed?

调用以查看您是否检测到任何问题。

使用我们上面的示例,这是我们如何实现 MyCI

# minitest/bogus_plugin.rb

module Minitest
  class MyCI < AbstractReporter
    attr_accessor :results, :addr, :port

    def initialize options
      self.results = []
      self.addr = options[:myci_addr]
      self.port = options[:myci_port]
    end

    def record result
      self.results << result
    end

    def report
      CI.connect(addr, port).send_results self.results
    end
  end

  # code from above...
end

常见问题

哪些版本彼此兼容?或者支持哪些版本?

Minitest 是 rails 的依赖项,直到最近才有一个过分热衷于向后兼容的策略。因此,我不得不支持已经过时的 ruby 版本。希望在不久的将来我只能支持当前版本的 ruby。

(截至 2024-05-10)

当前版本的 rails:(endoflife.date/rails)

| rails | min ruby | minitest | status   |  EOL Date  |
|-------+----------+----------+----------+------------|
|   7.1 | >= 2.7   | >= 5.1   | Current  | 2026-06-01?|
|   7.0 | >= 2.7   | >= 5.1   | Maint    | 2025-06-01?|
|   6.1 | >= 2.5   | >= 5.1   | Security | 2024-06-01?|
|   6.0 | >= 2.5   | >= 5.1   | EOL      | 2023-06-01 |
|   5.2 | >= 2.2.2 | ~> 5.1   | EOL      | 2022-06-01 |

如果要查看特定版本的要求,请运行

gem spec -r --ruby rails -v 7.0.0

当前版本的 ruby:(endoflife.date/ruby)

| ruby | Status  |   EOL Date |
|------+---------+------------|
|  3.3 | Current | 2027-03-31 |
|  3.2 | Maint   | 2026-03-31 |
|  3.1 | Security| 2025-03-31 |
|  3.0 | EOL     | 2024-03-31 |
|  2.7 | EOL     | 2023-03-31 |
|  2.6 | EOL     | 2022-03-31 |
|  2.5 | EOL     | 2021-03-31 | DO YOU SEE WHAT I'M STUCK WITH???

如何测试 SimpleDelegates?

以下实现和测试

class Worker < SimpleDelegator
  def work
  end
end

describe Worker do
  before do
    @worker = Worker.new(Object.new)
  end

  it "must respond to work" do
    _(@worker).must_respond_to :work
  end
end

输出失败

  1) Failure:
Worker#test_0001_must respond to work [bug11.rb:16]:
Expected #<Object:0x007f9e7184f0a0> (Object) to respond to #work.

Worker 是一个 SimpleDelegate,在 1.9+ 中是 BasicObject 的子类。期望放在 Object(下一级)上,因此 Worker (SimpleDelegate) 命中 method_missing 并向下委托给 Object.new 实例。该对象不响应 work,因此测试失败。

您可以通过使用 Minitest::Expectations 扩展 worker 来绕过 SimpleDelegate#method_missing。您可以像这样在实例级别的 setup 中执行此操作

before do
  @worker = Worker.new(Object.new)
  @worker.extend Minitest::Expectations
end

或者,您可以像这样扩展 Worker 类(在测试文件中!),例如

class Worker
  include ::Minitest::Expectations
end

如何在测试类之间共享代码?

使用模块。这正是它们的目的

module UsefulStuff
  def useful_method
    # ...
  end
end

describe Blah do
  include UsefulStuff

  def test_whatever
    # useful_method available here
  end
end

请记住,describe 只是创建测试类。归根结底,它只是 ruby,并且所有您正常的 Good Ruby Rules (tm) 都适用。如果您想使用模块通过 setup/teardown 扩展您的测试,请确保您始终调用 super。 before/after 会自动为您调用 super,因此请确保您不会调用两次。

如何在测试组之前运行代码?

像这样使用带有 begin…end 的常量

describe Blah do
  SETUP = begin
     # ... this runs once when describe Blah starts
  end
  # ...
end

这对于昂贵的初始化或共享状态很有用。请记住,这只是 ruby 代码,因此您需要确保此技术和共享状态不会干扰您的测试。

为什么我看到 uninitialized constant MiniTest::Test (NameError)

您是否正在使用 Bundler(例如通过 bundle exec)运行测试?如果是这样,为了要求 minitest,您必须首先将 gem 'minitest' 添加到您的 Gemfile 并运行 bundle。安装完成后,您应该能够要求 minitest 并运行您的测试。

使用 Minitest 的知名项目:

开发 Minitest:

Minitest 需要 Hoe

Minitest 自身的测试需要 UTF-8 外部编码。

这是 Windows 中常见的问题,其默认外部编码通常是 CP850,但它会影响任何平台。Minitest 可以使用任何编码运行测试套件,但是要运行 Minitest 自身的测试,你必须拥有 UTF-8 的默认外部编码。

如果你的编码错误,你将会看到如下错误:

--- expected
+++ actual
@@ -1,2 +1,3 @@
 # encoding: UTF-8
 -"Expected /\\w+/ to not match \"blah blah blah\"."
 +"Expected /\\w+/ to not match # encoding: UTF-8
 +\"blah blah blah\"."

要检查你当前的编码,请运行:

ruby -e 'puts Encoding.default_external'

如果你的输出不是 UTF-8,你可以将 RUBYOPTS 环境变量设置为 '-Eutf-8'。类似这样:

RUBYOPT='-Eutf-8' ruby -e 'puts Encoding.default_external'

请查阅你的操作系统/shell 文档以获取精确的语法(上述方法在基本的 Windows CMD 提示符下无效,请查找 SET 命令)。一旦你成功输出了 UTF-8,在 Minitest 中运行 rake 时使用相同的设置。

Minitest 自身的测试需要 GNU(或类似的)diff。

这也是一个主要影响 Windows 开发人员的问题。PowerShell 有一个名为 diff 的命令,但是它不适合与 Minitest 一起使用。

如果你看到如下的任何一个错误,你可能缺少 diff 工具:

  4) Failure:
TestMinitestUnitTestCase#test_assert_equal_different_long [D:/ruby/seattlerb/minitest/test/minitest/test_minitest_test.rb:936]:
Expected: "--- expected\n+++ actual\n@@ -1 +1 @@\n-\"hahahahahahahahahahahahahahahahahahahaha\"\n+\"blahblahblahblahblahblahblahblahblahblah\"\n"
  Actual: "Expected: \"hahahahahahahahahahahahahahahahahahahaha\"\n  Actual: \"blahblahblahblahblahblahblahblahblahblah\""

  5) Failure:
TestMinitestUnitTestCase#test_assert_equal_different_collection_hash_hex_invisible [D:/ruby/seattlerb/minitest/test/minitest/test_minitest_test.rb:845]:
Expected: "No visible difference in the Hash#inspect output.\nYou should look at the implementation of #== on Hash or its members.\n
{1=>#<Object:0xXXXXXX>}"
  Actual: "Expected: {1=>#<Object:0x00000003ba0470>}\n  Actual: {1=>#<Object:0x00000003ba0448>}"

如果你使用 Cygwin 或 MSYS2 或类似的工具,其中包含适用于 Windows 的 GNU diff 包。如果你没有,你可以从 gnuwin32.sourceforge.net/packages/diffutils.htm 下载 GNU diffutils(确保将其添加到你的 PATH 中)。

你可以通过以下命令确保它已安装并且路径配置正确:

diff.exe -v

有多个输出行,第一行应该是类似这样的:

diff (GNU diffutils) 2.8.1

如果你正在使用 PowerShell,请确保你运行的是 diff.exe,而不是仅仅运行 diff,这将调用 PowerShell 内置的函数。

已知扩展:

capybara_minitest_spec

Capybara RSpec 匹配器和 Minitest::Spec 期望之间的桥梁(例如,page.must_have_content("Title"))。

color_pound_spec_reporter

使用你的 Minitest Spec 风格测试,以彩色打印 Ruby Object 类型名称。

minispec-metadata

用于 describe/it 代码块和 CLI 标签过滤的元数据。例如,it "requires JS driver", js: true doruby test.rb --tag js 运行标记为 :js 的测试。

minispec-rails

在 Rails 5+ 中使用 Spec 风格的最低支持。

mini-apivore

用于基于 swagger 的自动化 API 测试。

minitest-around

用于 minitest 的 Around 代码块。替代 setup/teardown 模式。

minitest-assert_errors

添加 Minitest 断言来测试由 Minitest 本身引发或未引发的错误。

minitest-autotest

autotest 是一种持续测试工具,旨在在开发过程中使用。

minitest-bacon

minitest-bacon 使用类似 bacon 的功能扩展了 minitest。

minitest-bang

添加对 RSpec 风格的 let! 的支持,以便在每次测试之前立即调用 let 语句。

minitest-bisect

帮助你隔离和调试随机测试失败。

minitest-blink1_reporter

使用 Blink1 显示测试结果。

minitest-capistrano

用于测试 Capistrano 配方的断言和期望。

minitest-capybara

对 minitest 单元和 spec 的 Capybara 匹配器支持。

minitest-cc

它提供有关代码覆盖率的最低信息。

minitest-chef-handler

Minitest 套件作为 Chef 报告处理程序运行

minitest-ci

用于 Minitest 的 CI 报告器插件。

minitest-context

Minitest spec 中共享通用期望的代码重用定义上下文。

minitest-debugger

包装 assert,以便失败的断言会进入 ruby 调试器。

minitest-display

修补 Minitest,以允许轻松配置的输出。

minitest-documentation

受 rspec 启发的最小文档格式。

minitest-doc_reporter

受 rspec 文档格式启发的详细输出。

minitest-emoji

为你的测试通过、失败和跳过打印 emoji。

minitest-english

断言和期望的语义对称别名。

minitest-excludes

用于排除在特定条件下你不想运行的某些测试的干净 API。

minitest-fail-fast

重新实现了 RSpec 的“快速失败”功能

minitest-filecontent

支持文件中有预期结果的单元测试。不同的结果将再次存储在文件中。

minitest-filesystem

添加断言和期望以帮助测试文件系统内容。

minitest-firemock

使你的 Minitest 模拟更具弹性。

minitest-focus

一次专注于一个测试。

minitest-gcstats

一个 minitest 插件,它添加一个报告,其中包含按分配的对象数量排序的顶级测试。

minitest-global_expectations

支持所有对象的 minitest 期望方法

minitest-great_expectations

对 minitest 的断言和期望的通用有用的补充。

minitest-growl

通过 growl 进行 minitest 的测试通知器。

minitest-happy

全局激活 MINITEST PRIDE! RAWR!

minitest-have_tag

添加 Minitest 断言,以测试提供的字符串中是否存在 HTML 标签,包括内容。

minitest-heat

生成失败位置热图的报告

minitest-hooks

Around 和 before_all/after_all/around_all 钩子

minitest-hyper

为你的 Minitest 运行提供漂亮的单页 HTML 报告

minitest-implicit-subject

测试主题的隐式声明。

minitest-instrument

在执行测试方法时检测 ActiveSupport::Notifications。

minitest-instrument-db

将 minitest-instrument 提供的测试执行速度信息存储在数据库中。

minitest-junit

用于 minitest 的 JUnit 风格 XML 报告器。

minitest-keyword

使用带关键字参数的 Minitest 断言。

minitest-libnotify

通过 libnotify 进行 minitest 的测试通知器。

minitest-line

在行号处运行测试。

minitest-logger

定义 assert_log 并使 minitest 能够测试日志消息。支持 Logger 和 Log4r::Logger。

minitest-macruby

为 macruby UI 测试提供 minitest 扩展。

minitest-matchers

为 minitest 添加对 RSpec 风格匹配器的支持。

minitest-matchers_vaccine

添加符合匹配器规范的断言,但没有任何期望感染。

minitest-metadata

使用元数据(键值)注释测试。

minitest-mock_expectations

为 minitest 提供方法调用断言。

minitest-mongoid

用于 Minitest 的 Mongoid 断言匹配器。

minitest-must_not

Minitest 中提供 must_not 作为 wont 的别名。

minitest-optional_retry

自动重试失败的测试以帮助解决不稳定性。

minitest-osx

适用于 Mac OS X 通知中心的报告器。

minitest-parallel_fork

基于 fork 的并行化

minitest-parallel-db

使用单个数据库并行运行测试。

minitest-power_assert

用于 Minitest 的 PowerAssert。

minitest-predicates

为 .predicate? 方法添加支持。

minitest-profile

列出套件中最慢的 10 个测试。

minitest-rails

用于 Rails 3.x 的 Minitest 集成。

minitest-rails-capybara

用于 Minitest::Rails 的 Capybara 集成。

minitest-reporters

创建可自定义的 Minitest 输出格式。

minitest-rg

用于 Minitest 的彩色红色/绿色输出。

minitest-rspec_mocks

将 RSpec Mocks 与 Minitest 一起使用。

minitest-server

minitest-server 使用你的 minitest 进程提供客户端/服务器设置,允许你的测试运行将其结果直接发送到处理程序。

minitest-sequel

用于加速 Ruby Sequel 数据库设置的开发和测试的 Minitest 断言。

minitest-shared_description

支持共享的 spec 和共享的 spec 子类

minitest-should_syntax

用于 Minitest 的 RSpec 风格的 x.should == y 断言。

minitest-shouldify

Minitest 添加各种 should (坏主意)

minitest-snail

打印出耗时太长的测试列表

minitest-spec-context

Minitest::Spec 提供 rspec 式的 context 方法。

minitest-spec-expect

用于 Minitest::Spec 的 Expect 语法(例如,expect(sequences).to_include :celery_man)。

minitest-spec-magic

用于 Rails 及其他用途的 Minitest::Spec 扩展。

minitest-spec-rails

为 ActiveSupport::TestCase 插入 Minitest::Spec 超类。

minitest-sprint

运行你的测试(明白了吗?它很快!),并使重新运行单个失败的测试更容易。

minitest-stately

查找测试之间泄漏的状态

minitest-stub_any_instance

在代码块的持续时间内,为给定类的任何实例存根方法。

minitest-stub-const

在代码块的持续时间内存根常量。

minitest-tags

为 minitest 添加标签。

minitest-unordered

向 minitest 添加一个新的断言,用于检查集合的内容,忽略元素顺序。

minitest-vcr

使用 Minitest::Spec 和 VCR 的自动磁带管理。

minitest_log

添加结构化日志记录、数据解释和判断。

minitest_owrapper

获取作为 TestResult 对象的测试结果。

minitest_should

用于 minitest test::unit 的 Shoulda 风格语法。

minitest_tu_shim

在 test/unit 和 minitest 之间架起桥梁。

mongoid-minitest

用于 Mongoid 的 Minitest 匹配器。

mutant-minitest

用于 mutant 的 Minitest 集成。

pry-rescue

一个带有 minitest 支持的 pry 插件。请参阅 pry-rescue/minitest.rb。

rematch

从大型硬编码数据中整理你的测试文件,并在代码更改时自动更新它们。

rspec2minitest

轻松将任何 RSpec 匹配器转换为 Minitest 断言和期望。

stubberry

多个存根“浆果”、甜蜜且有用的存根助手和断言。(stub_must、assert_method_called、通过 id 存根 ORM 对象)

未知扩展:

作者们... 请发送一个包含您的 minitest 扩展描述的 pull request。

Minitest 相关资源

要求:

安装:

sudo gem install minitest

在 1.9 版本中,您已经拥有它了。要获取更新的版本,您仍然可以安装 gem,然后 require “minitest/autorun” 应该会自动将其拉入。如果没有,您需要自己进行操作。

gem "minitest"     # ensures you"re using the gem, and not the built-in MT
require "minitest/autorun"

# ... usual testing stuffs ...

请注意:Ruby 1.9/2.0 打包自己的 gem 的方式存在一个严重问题。它们会安装一个 gem 规范文件,但不会将 gem 内容安装到 gem 路径中。这会搞乱 Gem.find_files 和许多其他东西(gem which,gem contents 等)。

直接安装 minitest 作为 gem,您会更快乐。

许可证:

(MIT 许可证)

版权所有 © Ryan Davis, seattle.rb

特此授予任何人免费获取本软件及相关文档文件(“软件”)副本的许可,以不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售本软件副本的权利,并允许向被提供本软件的人员授予此等权利,但须遵守以下条件

以上版权声明和本许可声明应包含在本软件的所有副本或重要部分中。

本软件按“原样”提供,不作任何明示或暗示的保证,包括但不限于对适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担责任,无论是在合同诉讼、侵权行为还是其他方面,因软件或软件的使用或其他交易而产生或与之相关的责任。