我有一个简单的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
答案 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
的文档
答案 1 :(得分:2)
执行以下操作:
class TestDie < MiniTest::Unit::TestCase
def test_argument_error
assert_raises(ArgumentError) { Die.new(0) }
end
end
的文档
失败,除非该块引发exp之一。返回匹配的异常,以便您可以检查消息,属性等。