2014-02-10 4 views
0

Ruby 소개를위한 테스트 용 개발을하고 있습니다. My TestObject 클래스는 a와 b의 두 매개 변수로 초기화 될 수 있지만 b가 숫자가 아닌 경우 ArgumentError를 발생시켜야합니다. 여기는 내 initialize 메서드입니다, 나는 예외를 발생시키는 방법을 모르고 다른 모든 테스트가 실패하지 않도록 처리합니다. 어떤 도움을 주셔서 감사합니다. 제 교수님은 루비에 대한 예외 사항에 대해 아직 가르쳐주지 않았고 시작, 인상, 구조를 시도하는 것 이외에도 많은 도움을 온라인으로 찾을 수 없었지만 저에게는 효과가 없었습니다.Ruby에서 오류 발생 및 처리하기

def initialize(a,b) 
    @a = a 
    @b = b 

    raise ArgumentError unless b.is_a? 
end 
+2

'raise ArgumentError b.is_a? Fixnum' 당신이 Integers에 대해 구체적이라면, b.is_a가 아닌 한'ArgumentError를 올릴 수 있습니까? Integer' – bjhaid

답변

1

@bjhaid가 말했다. 원하는 대상

raise ArgumentError unless b.is_a?(Numeric) 

testunit을 사용한다고 가정합니다. 귀하의 테스트에서 사용 :

assert_raise ArgumentError do 
    WhateverYourClassIsCalled.new('something', 'something that is not a number') 
end 
+0

, 고마워요! 몰랐어요 (Fixnum) – parameter

+2

제발,'Fixnum'을 사용하지 마십시오. 구현 세부 사항, 처음에는 프로그래머에게 노출되어서는 안되는 (IMO) 성능 최적화입니다. (YARV 2의 flonum과 비교하면 VM 내부에 완전히 숨겨져 있습니다.) 'Integer'를 원한다면 'Integer'를 확인하십시오. 그러나 질문에 * any *가 있는지 묻습니다. 따라서 올바른 클래스를 확인하십시오 'Numeric'이 될 것입니다. 실제로 OO에서는 특정 * 클래스 *를 검사하는 것이 정확하지 않으므로 * 프로토콜 *을 확인해야합니다. 그러나 불행하게도 그 개념은 특히 OO를 가르치는 사람들이 잘 이해하지 못합니다. –

+0

매일 뭔가를 배웁니다. 귀하의 의견에 따라 개정. – rainkinz