2014-02-10 12 views
0

我正在做一個用於Ruby入門任務的測試驅動開發。我的TestObject類應該可以用2個參數a和b初始化,但如果b不是數字,那麼應該引發一個ArgumentError。這裏是我的初始化方法,我不知道如何引發異常,然後處理它以防止所有其他測試失敗。任何幫助都是值得讚賞的,我的教授還沒有教我們有關Ruby的例外情況,除了嘗試開始,提高,救援,但我沒能在網上找到很多幫助,但這對我沒有任何作用。在Ruby中引發錯誤並處理它

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

    raise ArgumentError unless b.is_a? 
end 
+2

你想提出ArgumentError,除非b.is_a? Fixnum'如果你是整數特定的,那麼你可以'提出ArgumentError,除非b.is_a?整數' – 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中的flonums比較,它們完全隱藏在虛擬機內部)如果你想要一個Integer,檢查一個Integer,但是這個問題要求*任何*號,所以要檢查的類是正確的將是'數字'。 (實際上,檢查一個特定的*類*在OO中永遠不會是正確的,你應該檢查一個*協議*,但不幸的是,這個概念並不是很好理解,尤其是教OO的人。) –

+0

你每天都會學到一些東西。根據您的評論修改。 – rainkinz

相關問題