我正在为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之后做一个传递,因为我的实际错误信息是在我的阶乘程序中吗?
答案 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)