Tag: unit testing

Rubyunit testing技术,Mocking和Stubbing

我被招募为SW Dev,我正在尝试使用RSPEC和RR进行unit testing,但是很难决定特定策略,主要是因为我被分配给已经编码的unit testing书面。 考虑以下代码,它是一个名为method1的大方法的一部分: if ([“5234541252”, “6236253223”].include?(self.id)) self.DoCheck logs.add ‘Doing check’, “id = #{self.id}” return end 这部分方法的相关unit testing将是这样的: “should do check only if id = 5234541252 or 6236253223” 但我遇到了几个问题,基本上涉及最佳实践,例如: 如何使用RR和RSPEC检查是否已从“method1”中调用DoCheck? 我尝试过使用dont_allow(Object).DoCheck但是它不起作用。 describe :do_route do it “should do check only if id = 5234541252 or 6236253223” do user = Factory(:User) user.id = “5234541252” dont_allow(user).DoCheck user.method1 […]

是什么让testunit或其他nunit样式框架成为一个好的失败消息?

在Ruby的测试/单元和其他类似的nunit样式框架中,什么是一个好的失败消息? 失败消息是否仅描述预期值与预期值的匹配程度如何? assert_match(“hey”, “hey this is a test”, “The word does not exist in the string”) 它应该描述你预期会发生什么吗? assert_match(“hey”, “hey this is a test”, “I expected hey to be in the string”) 它应该描述为什么你希望这种行为发生吗? assert_match(“hey”, “hey this is a test”, “Program should provide a greeting”) 它应该描述您认为测试可能失败的原因吗? assert_match(“konnichiwa”, “konnichiwa this is a test”, “Program failed to use supplied […]

测试驱动开发 – 我应该测试数据库列和索引吗?

我是TDD的新手。 我发现shoulda gem能够测试数据库实体是否存在列以及测试其索引的能力。 但是有必要在我的测试套件中包含列和索引的测试吗? 我是否需要关注在开发过程中可能删除任何列和索引?

如何在RSpec中测试信号处理,特别是处理SIGTERM?

Heroku可能出于各种原因向您的应用程序发送SIGTERM,因此我创建了一个处理程序来处理一些清理,以防万一。 一些谷歌搜索没有得到任何关于如何在RSpec中测试这个问题的答案或例子。 这是基本代码: Signal.trap(‘TERM’) do cleanup end def cleanup puts “doing some cleanup stuff” … exit end 测试程序收到SIGTERM时调用此清理方法的最佳方法是什么?

Ruby:在代码中使用rand(),但编写测试来validation概率

我有一些代码可以根据加权随机提供的东西。 重量更重的东西更有可能随机选择。 现在我是一个很好的rubyist,我想用测试来覆盖所有这些代码。 我想测试根据正确的概率获取的东西。 那么我该如何测试呢? 为随机的东西创建测试会使实际与预期的比较变得非常困难。 我有一些想法,以及为什么它们不会很好用: Stub Kernel.rand在我的测试中返回固定值。 这很酷,但rand()被多次调用,我不确定我是否可以通过足够的控制来测试它以测试我需要的东西。 获取随机项的次数很多次,并将实际比率与预期比率进行比较。 但除非我可以无数次运行它,否则这将永远不会是完美的,如果我在RNG中运气不好,可能会间歇性地失败。 使用一致的随机种子。 这使RNG可重复,但它仍然没有给我任何validation项目A将在80%的时间发生(例如)。 那么我可以使用什么样的方法来编写随机概率的测试覆盖率?

RSpec与Shoulda?

我是unit testing场的新手; 我现在只使用了大约2个月的unit testing。 当我在Ruby中进行unit testing时,我目前遵循TDD样式并使用Test :: Unit :: TestCase。 我还阅读了有关RSpec及其如何遵循BDD方法的内容。 我也读过关于Shoulda的内容,它介于两个框架之间。 我的问题是,我应该把时间花在RSpec或Shoulda上,或者我应该坚持使用Test :: Unit :: TestCase? 任何有关该主题的意见表示赞赏。

Date与ActiveSupport :: TimeWithZone的比较失败

我的Waiver模型上有一个age方法,如下所示: def age(date = nil) if date.nil? date = Date.today end age = 0 unless date_of_birth.nil? age = date.year – date_of_birth.year age -= 1 if date < date_of_birth + age.years #for days before birthday end return age end 然后我有一个看起来像这样的规范: it “calculates the proper age” do waiver = FactoryGirl.create(:waiver, date_of_birth: 12.years.ago) waiver.age.should == 12 end 当我运行此规范时,我得到comparison […]

Ruby unittest错误:“你应该要求’minitest / autorun’。”

我有一个非常简单的unit testing,我从http://en.wikibooks.org/wiki/Ruby_Programming/Unit_testing复制。 require_relative “simple_number” require “test/unit” class TestSimpleNumber < Test::Unit::TestCase def test_simple assert_equal(4, SimpleNumber.new(2).add(2) ) assert_equal(6, SimpleNumber.new(2).multiply(3) ) end end 执行此代码会导致错误: Warning: you should require ‘minitest/autorun’ instead. Warning: or add ‘gem “minitest”‘ before ‘require “minitest/autorun”‘ From: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/test/unit.rb:3:in `’ tc_simple_number.rb:5:in `’ MiniTest::Unit::TestCase is now Minitest::Test. From /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/test/unit/testcase.rb:8:in `’ /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/test/unit.rb:670:in `’: undefined method `_run_suite’ for class `Test::Unit::Runner’ […]

为什么Test :: Unit测试版启动速度如此之慢?

>rails -v Rails 1.2.6 >ruby -v ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] 当我运行这样的测试夹具(测试轨道模型类)时,开始执行这些测试需要20-30秒(显示“已加载的套件……”)。 是什么赋予了? >ruby test\unit\category_test.rb require File.dirname(__FILE__) + ‘/../test_helper’ class CategoryTest ‘Apparel’}) assert obCategoryEntry.save, obCategoryEntry.errors.full_messages.join(‘, ‘) assert_equal 1, Category.count assert_not_nil Category.find(:all, :conditions=>”name=’Apparel'”) end #.. 1 more test here end 这个是使用没有灯具的MySql DB的Rails。 这次它启动时间为30秒+。

Rails测试具有日期范围的named_scope

情景 我在名为’last_week’的模型上有一个named_scope。 它所做的就是从上周获取记录。 我想测试这个,我的方法是测试返回的结果是否在一定范围内。 我不知道这是否是在类方法上测试此function的正确方法。 我不能使用RSpec,Shoulda或其他第三方客户端插件。 如果我愿意,我只允许使用摩卡。 # Model class Article { :created_at => 1.week.ago..DateTime.now.end_of_day } end #Test class ArticleTest < ActiveSupport::TestCase test "named scope :last_week " do last_week_range = DateTime.now.end_of_day.to_i – 1.week.ago.to_i assert_in_delta last_week_range, Article.last_week.first.created_at – Article.last_week.last.created_at, last_week_range end end 寻找关于这种方法的正确与错误的反馈。