Mat*_*att 4 ruby testing unit-testing assert factorial
我有程序factorial.rb和test_factorial.rb. 前者看起来像这样:
def factorial(n)
(1..n).inject(:*) || 1
end
Run Code Online (Sandbox Code Playgroud)
test_factorial 看起来像这样:
def test_number
assert_equal 6, factorial(3),"3! should be 6"
end
def test_zero
assert_equal 1, factorial(0), "0! should be 1"
end
Run Code Online (Sandbox Code Playgroud)
我需要test_negative在测试文件中添加另一种方法,以确认当阶乘为负时引发错误。我查看了文档,但仍然不明白我应该做什么。我是否必须在之后指定某种类型的错误assert_raise?factorial.rb由于错误是自动生成的,我是否需要添加代码?
假设您正在使用 minitest,如果您尝试测试是否引发了错误,则可以使用该asert_raises方法。(注意复数形式)
def test_negative
assert_raises <expected error name> do
factorial(-1)
end
end
Run Code Online (Sandbox Code Playgroud)
但是,到目前为止您提供的示例不会引发任何错误。
附加信息:
此示例(1..-5).inject(:*)将评估为 nil。你不会得到错误。我假设您test_negative应该断言返回值是1您当前的实现。
另外,如果你想给注入一个默认值,你可以将它作为第一个参数传递:(1..n).inject(1, :*)。这样您就可以避免使用||运算符。
下面来自@ArupRakshit 的一个很好的建议是提出你自己的NegativeFactorial例外。您需要先定义它。
class NegativeFactorial < StandardError; end
Run Code Online (Sandbox Code Playgroud)
然后您可以在阶乘方法中使用它,如下所示:
def factorial(n)
raise NegativeFactorial, "The number provided is negative." if n < 0
(1..n).inject(1, :*)
end
Run Code Online (Sandbox Code Playgroud)
您可以实现您test_negative的断言已引发异常。
def test_negative
assert_raises NegativeFactorial do
factorial(-1)
end
end
Run Code Online (Sandbox Code Playgroud)