在ruby测试中使用assert_raise

时间:2014-02-23 21:45:30

标签: ruby assertion

我正在为ruby程序创建一个测试文件,该程序可以找到给定数字的阶乘。我的所有测试都运行良好,除了我的字符串错误和负数测试应该引发异常。我不完全确定引发异常的语法,我已经阅读了文档。

这是我的阶乘程序本身的代码,n是应该传递的数字:

if n.is_a?(Integer) == false
raise 'strings are not acceptable'
end


if n < 0
raise 'negatives are not acceptable'
end

我的测试文件中的测试用例如下:

def test_negative
factorial(-1)
assert_raise do
end
end

def test_string
factorial('hello')
assert_raise do
end
end

我的两个测试都以错误的形式返回,而我的其他3个测试正常的数字,则通过了。我是ruby的新手,但是我想在assert_raise之后做一个传递,因为我的实际错误信息是在我的阶乘程序中吗?

1 个答案:

答案 0 :(得分:0)

在您的第一个测试用例中,它不会返回错误,因为-1也被视为Integer

#irb output
2.0.0-p247 :003 > a = -1
 => -1 
2.0.0-p247 :004 > a.is_a?(Integer)
 => true 

并且在你的第二种情况下,当你传递一个字符串时,即使在进入你的条件之前它也会出错,因为你试图将字符串与整数进行比较

#irb outout
2.0.0-p247 :007 > "hello" < 0
ArgumentError: comparison of String with 0 failed
    from (irb):7:in `<'
    from (irb):7

关闭主题,你可以写

if n.is_a?(Integer) == false
  raise 'strings are not acceptable'
end

as(更红宝石的方式:))

raise 'strings are not acceptable' unless n.is_a?(Integer)