据说,如果对mock stub 和fakes概念不熟悉的话可以看看
这个 我自己看了一下,没懂。还是看例子容易些
例如,有这么个东西需要测试
class MailPurge
def initialize(imap)
@imap = imap
end
def purge(date)
# IMAP wants dates in the format: 8-Aug-2002
formatted_date = date.strftime('%d-%b-%Y')
@imap.authenticate('LOGIN', 'user', 'password')
@imap.select('INBOX')
message_ids = @imap.search(["BEFORE #{formatted_date}"])
@imap.store(message_ids, "+FLAGS", [:Deleted])
end
end
我们的mock这样用
#相当于mock出一个imap对象有authenticate select等方法,重要是就一个ids是返回值有依赖
def test_purging_mail
date = Date.new(2010,1,1)
formatted_date = '01-Jan-2010'
ids = [4,5,6]
mock = MiniTest::Mock.new
# mock expects:
# method return arguments
#-------------------------------------------------------------
mock.expect(:authenticate, nil, ['LOGIN', 'user', 'password'])
mock.expect(:select, nil, ['INBOX'])
mock.expect(:search, ids, [["BEFORE #{formatted_date}"]])
mock.expect(:store, nil, [ids, "+FLAGS", [:Deleted]])
mp = MailPurge.new(mock)
mp.purge(date)
assert mock.verify
end
如果,嫌不够的话,可以学一下mock的
源代码
def initialize
@expected_calls = {}
@actual_calls = Hash.new {|h,k| h[k] = [] }
end
#用来记录实际调用的,后面用到
def expect(name, retval, args=[])
n, r, a = name, retval, args # for the closure below
@expected_calls[name] = { :retval => retval, :args => args }
self.class.__send__(:define_method, name) { |*x|
raise ArgumentError unless @expected_calls[n][:args].size == x.size
@actual_calls[n] << { :retval => r, :args => x }
retval
}
self
end
#如何完成mock的呢,expect的三个参数存起来,然后,参数和预期的返回值,存起来,这里比较技巧
def verify
@expected_calls.each_key do |name|
expected = @expected_calls[name]
msg = "expected #{name}, #{expected.inspect}"
raise MockExpectationError, msg unless
@actual_calls.has_key? name and @actual_calls[name].include?(expected)
end
true
end
#验证
分享到:
相关推荐
`MiniTest::Mock`和`MiniTest::Mock#expect`方法可以用来创建和配置模拟对象。 6. **基准测试**:minitest的`MiniTest::Benchmark`模块支持基准测试,可以帮助开发者评估代码性能。 7. **颜色输出**:minitest在...
如果您想编写自己的报告程序,只需include Minitest::Reporter并覆盖您想要的方法即可。 查看提供的示例记者。 不喜欢默认的进度条记者吗? Minitest :: Reporters . use! Minitest :: Report
MiniTest::FireMock 这个 gem 旨在使隔离测试更具弹性。 在独立测试中,FireMock 与普通模拟没有什么不同。 唯一的区别是在非隔离环境中调用测试的时间。 它检查模拟类上是否存在该方法,如果不存在则失败。 这为...
使Rails使用MiniTest :: Spec! minitest-spec-rails gem使您可以在现有的Rails 2.3、3.x或4.x测试套件中轻松使用MiniTest :: Spec DSL。 它通过强制ActiveSupport :: TestCase利用MiniTest :: Spec :: DSL来实现此...
然后,您必须将匹配器包含在Minitest::Test class Minitest::Test include MiniTest::Matchers::ActiveModel end 用法 查看以获取更多详细信息。 贡献 阅读。 执照 麻省理工学院许可证。 版权所有 2012 F
Pact :: Consumer :: Minitest 为Minitest提供消费者支持。 安装 将此行添加到您的应用程序的Gemfile中: gem 'pact-consumer-minitest' 然后执行: $ bundle 或将其自己安装为: $ gem install pact-...
**nim-minitest:用于nim的minitest框架** nim-minitest是一个专门为Nim编程语言设计的测试框架,它借鉴了Python的minitest库的概念,为Nim开发者提供了简洁、高效的单元测试解决方案。Nim是一种静态类型、编译型的...
Test::Unit 的 minitest 包装器 在 Ruby 1.9 和 2.1 之间,Ruby 为 minitest 提供了一个包装器,以提供与 Ruby 1.8 相同的 Test::Unit 接口。 Ruby 2.2 附带了 Test::Unit 的捆绑 gem,但这不是包装器。 对包装好的 ...
MINITEST钩 minitest-hooks为Minitest添加了around和before_all / after_all / around_all钩子。 这使您可以执行以下操作,例如在数据库...您可以将某些规格的默认值设置为Minitest::HooksSpec : MiniTest :: Spec .
Minitest :: PerformanceRegression 通过注释测试,分析其性能并检查自上次运行以来的性能回归。... extend Minitest::PerformanceRegression def test_thing assert true end check_performance_regression_on :
**minitest:Scala和Scala.js的轻量级测试框架** `minitest` 是一个针对Scala编程语言及其JavaScript后端Scala.js设计的轻量级测试库。这个库的主要目标是提供简洁、快速且易于理解的测试工具,使得开发者在编写...
Minitest::Parallel::Db 与单个数据库并行运行 Minitest。 基本原理 即使涉及数据库,我们也应该能够并行运行测试。 我们可以利用数据库事务来保持我们的测试相互隔离。 已经有解决方案,但有些需要创建多个数据库...
rack-minitest = rack-test + Minitest 。 看看我在那里做了什么? 这个 gem 为rack-test和Minitest添加了一些方便的方法,我发现自己为我编写的每个应用程序一遍又一遍地重复。 它添加了一些处理 JSON 的方法到...
在提供的压缩文件 "tdd-em-ruby-codigo-minitest-master" 中,读者可以期待找到一系列示例代码,展示了如何在实际项目中应用这些TDD原则和Mini Test框架。这些示例可能包括创建测试、编写满足测试的最小功能代码,...
考虑一个神话般的矮人,它的公共 API 由一个方法组成: Dwarf#mine(mountain) 提供的山对象应该通过随机返回 3 个字符串之... 使用 Minitest 的内置Minitest::Mock库 ( Minitest::Mock ) 使用 Mocha gem(测试单元和
守卫-jruby-minitest 在 TDD 环境中使用时,Guard 一直是一个很好的生产力助推器。 然而,JRuby 使 TDD 变得更加困难,如果不是不可能的话。 这是因为默认情况下,每个run_on_modification或run_on_change启动一个...
在IT行业中,测试是软件开发过程中的重要环节,它确保了程序的质量和稳定性。Java作为广泛应用的编程语言,拥有丰富的测试...在深入研究"miniTest-master"的内容后,可以进一步提高测试技能,并将其应用到实际项目中。
minitest-flog 打败你的代码,看看它流血的地方。 Flog 分析 Ruby 代码的复杂性迹象,...minitest-flog 引入了一个新的 Minitest::Flog::Test 类,您将使用它来对项目中的复杂性进行任何断言。 通过子类化 Minitest
gem 'minitest-retry' 然后执行: $ bundle 或将其自己安装为: $ gem install minitest-retry 用法 在您的test_helper.rb文件中,添加以下行: require 'minitest/retry' Minitest :: Retry . use! 可以指定...
minitest-pretty_diff Monkey-patches MiniTest::Assertions#mu_pp在比较它们之前漂亮地打印散列和数组。 这使得更容易发现嵌套结构之间的差异。用法只需要 gem,并像以前一样使用 MiniTest 的断言。前 MiniTest::...