2014-04-09 38 views
-1

我有一个简单的模具卷类。如何测试ArgumentError?raise ArgumentError ruby​​

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

你不需要明确地使用这些'return'关键字..它是隐含的。 –

回答

2

此实现应该帮助你断言是否有错误被提高或不:

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

+0

非常适合添加双方测试用例,但您可以通知我也改进我的.. –

2

做如下:

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

这里是assert_raises

文件失败,除非块中引发EXP之一。返回相匹配,以便您可以检查该消息的例外,属性等

相关问题