의 사용은 나는 운동이 제공하는 각 기능에 대한 단위 테스트를 작성하도록 요청 Exercise 49 of Learn Ruby the Hard Way적절한 Assert_Raise 단위 테스트 및 예외 클래스
작업입니다. 적절한 예외가 발생하면 테스트 할 항목 중 하나입니다. 이를 위해 assert_raise
을 사용하는 것이 좋습니다. 여기
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
그리고 여기에 기능 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
는 메시지입니다 내가 얻을 :
assert_raise
기능에 대한 이해를 바탕으로
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
,이 시험을 통과해야한다, 내가 사용하는 방식에 문제가 있습니까? 누군가가 내가 함께 일하고있는 모든 파일의 전체 소스 코드를 원하는 경우
감사합니다! 그건 내 문제를 해결. –