在Ruby中对特定函数进行单元测试时出现奇怪的错误

在Ruby中对特定函数进行单元测试时出现奇怪的错误,ruby,unit-testing,learn-ruby-the-hard-way,Ruby,Unit Testing,Learn Ruby The Hard Way,我正在做这个 本练习要求为提供的每个函数编写一个单元测试。我正在编写的一个单元测试给了我一个错误 下面是我正在测试的代码(word_list是一个Pair结构数组) 以下是测试: def test_skip small_list = [Pair.new(:verb, 'go'), Pair.new(:verb, 'do')] skip(small_list, :verb) assert_equal([],small_list) end 以下是运行单元测试时出现的错误:

我正在做这个

本练习要求为提供的每个函数编写一个单元测试。我正在编写的一个单元测试给了我一个错误

下面是我正在测试的代码(word_list是一个Pair结构数组)

以下是测试:

def test_skip
    small_list = [Pair.new(:verb, 'go'), Pair.new(:verb, 'do')]
    skip(small_list, :verb)
    assert_equal([],small_list) 
end
以下是运行单元测试时出现的错误:

  1) Error:
test_skip(SentenceTests):
TypeError: backtrace must be Array of String
    test_sentence.rb:23:in `test_skip'
在这种情况下,第23行表示“跳过(小列表:动词)”。我不知道为什么会发生这种错误,上面两个函数也进行了单元测试,测试结果很好

@Zabba,我确实按照上面练习中的说明放置了它们:

class ParserError < Exception

end
class parserror
如果有人需要查看我使用的确切文件,请点击以下链接: 这条线

skip(small_list, :verb)
使您的测试跳过整个列表(两个动词)。最后,它是空的。 所以
小列表。第一个
nil
,它没有方法/字段
word

我得到了错误

undefined method `word' for nil:NilClass (NoMethodError)
不过

可能在您的代码中,这个异常被其他一些代码捕获,这些代码本身会引发您看到的异常

更新

在Ruby 1.9的测试/单元中(更具体地说,在它所基于的minitest/单元中),有一种方法
skip
,它与您的
skip
相冲突。见第610行。该方法引发异常,因为它预期其第二个参数是数组


只需重新命名您的
skip

match
peek
中删除
rescue
子句,一次删除一个,然后查看出现了什么异常。我从match和peek中删除了rescue,一次删除一个,并且在所有情况下都得到了相同的错误。您是在使用
parserror
还是在任何地方调用
raise
呢?如果您在使用
raise
之后删除所有内容呢。。你还知道那个错误吗?这里还涉及到什么?你到底是如何运行这段代码的?异常上有一个
backtrace
方法,它应该返回一个数组。
def test\u skip
small\u list=[Pair.new(:verb,'go')、Pair.new(:verb,'do')]
skip(small\u list,:verb)
answer=small\u list.first.word
断言等于(answer,nil)
end
引发相同的错误。如果要根据代码调整测试,正确的断言应该是
assert_equal([],小列表)
;-)。。。不要计算
nil.word
。明白了,我按照你的建议更改了测试,但仍然会出现相同的错误。谢谢@undur\u gongor,非常感谢你的帮助。
undefined method `word' for nil:NilClass (NoMethodError)