引发ArgumentError ruby

时间:2014-04-09 18:09:06

标签: ruby error-handling

我有一个简单的Die roll课程。如何测试ArgumentError?

 class Die
   def initialize(num)
    if num < 1
      raise(ArgumentError)
    end
    @num = num
  end
  def sides
    return @sides
  end

  def roll
    @value = rand(@num) + 1
    return @value
  end
end

这是我失败的尝试。

assert_raise ArgumentError do
  zero = 0
  die = Die.new(zero)
  puts die.sides == raise(ArgumentError)
end

2 个答案:

答案 0 :(得分:3)

此实现应该可以帮助您断言是否引发了错误:

class TestDie < MiniTest::Unit::TestCase 
  def test_argument_error
    assert_raises ArgumentError do
      Die.new(0)
    end
  end

  def test_argument_error_not_raised
    refute_raises ArgumentError do
      Die.new(2)
    end
  end
end  

为了驳斥不应该引发异常,您可以编写自己的refute_raises方法,类似于:

def refute_raises
  yield
rescue Exception => err
  flunk "Expected no failures but #{mu_pp(err).chomp} was raised."
end

assert_raisesflunk

的文档

答案 1 :(得分:2)

执行以下操作:

class TestDie < MiniTest::Unit::TestCase 
  def test_argument_error
    assert_raises(ArgumentError) { Die.new(0) }
  end
end

以下是assert_raises

的文档
  

失败,除非该块引发exp之一。返回匹配的异常,以便您可以检查消息,属性等。