Bon Assert_Raise de Tests Unitaires et d'Utilisation de la Classe d'Exception

Je suis en train de travailler sur Exercice 49 d'Apprendre Ruby à la Dure

L'exercice vous demande d'écrire un test unitaire pour chaque fonction. L'un des éléments que je suis en train de tester si une bonne exception est levée. Il est suggéré que nous utilisons assert_raise à cette fin.

Voici le code, je suis en train de tester:

class ParserError < Exception

end

Pair = Struct.new(:token, :word)

def peek(word_list)
    begin
        word_list.first.token
    rescue
        nil
    end 
end

def match(word_list, expecting)
    word = word_list.shift
    if word.token == expecting
        word
    else
        nil
    end
end

def skip_word(word_list, token)
    while peek(word_list) == token
        match(word_list, token)
    end
end

def parse_verb(word_list)
    skip_word(word_list, :stop)

    if peek(word_list) == :verb
        return match(word_list, :verb)
    else
        raise ParserError.new("Expected a verb next.")
    end
end

Et voici le test, pour la fonction parse_verb:

def test_parse_verb
    list_one = [Pair.new(:verb, 'go'), Pair.new(:noun, 'king')]
    assert_equal(parse_verb(list_one), Pair.new(:verb, 'go'))

    list_two = [Pair.new(:noun, 'player') ,Pair.new(:verb, 'go'), Pair.new(:noun, 'king')]
    assert_raise(ParserError.new("Expected a verb next.")) {parse_verb(list_two)}
end

Quand je lance le test, il échoue et voici le message que je reçois:

Larson-2:test larson$ ruby test_sentence.rb
Loaded suite test_sentence
Started
.F..
Finished in 0.001204 seconds.

  1) Failure:
test_parse_verb(SentenceTests) [test_sentence.rb:36]:
[#<ParserError: Expected a noun or direction next.>] exception expected, not
Class: <ParserError>
Message: <"Expected a verb next.">
---Backtrace---
/Users/larson/Ruby/projects/ex48/lib/sentence.rb:45:in `parse_verb'
test_sentence.rb:36:in `block in test_parse_verb'
---------------

4 tests, 7 assertions, 1 failures, 0 errors, 0 skips

Test run options: --seed 40627

Basé sur ma compréhension de la assert_raise fonction, ce test devrait passer, est-il quelque chose de mal avec la façon dont je suis à l'aide?

Si quelqu'un voudrais un code source complet de tous les fichiers, je travaille avec je il est disponible ici

OriginalL'auteur Andrew Lauer Barinov | 2011-09-04