Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用assert_raise测试Ruby中的错误?_Ruby_Unit Testing_Testing_Assert_Factorial - Fatal编程技术网

如何使用assert_raise测试Ruby中的错误?

如何使用assert_raise测试Ruby中的错误?,ruby,unit-testing,testing,assert,factorial,Ruby,Unit Testing,Testing,Assert,Factorial,我有程序factorial.rb和test\u factorial.rb。前者是这样的: def factorial(n) (1..n).inject(:*) || 1 end 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 def factorial(n) ra

我有程序
factorial.rb
test\u factorial.rb
。前者是这样的:

def factorial(n)
  (1..n).inject(:*) || 1
end
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
def factorial(n)
  raise NegativeFactorial, "The number provided is negative." if n < 0
  (1..n).inject(1, :*)
end
test\u factorial
如下所示:

def factorial(n)
  (1..n).inject(:*) || 1
end
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
def factorial(n)
  raise NegativeFactorial, "The number provided is negative." if n < 0
  (1..n).inject(1, :*)
end

我需要向测试文件中添加另一个方法,
test\u negative
,该方法确认在阶乘为负时引发错误。我看了文档,但仍然不明白我应该做什么。我是否必须在
assert\u raise
之后指定某种类型的错误?由于错误是自动生成的,我是否需要向factorial.rb添加代码?

假设您使用的是minitest,如果您试图测试是否引发了错误,则可以使用
asert\u raises
方法。(注意复数形式)

然后您可以在阶乘方法中使用它,如下所示:

def factorial(n)
  (1..n).inject(:*) || 1
end
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
def factorial(n)
  raise NegativeFactorial, "The number provided is negative." if n < 0
  (1..n).inject(1, :*)
end

OP可以做
raisenegativefactorial if n我如何断言异常已被引发?这就是我遇到的问题。@N1ghtshade3我已经更新了我的答案,以包括使用assert\u的测试。如果提供数字字符,则当前实现不会引发任何错误。答案包括提出错误的方法和挽救错误的方法。