2010-08-25 83 views
12

我最近嘗試磨礪我的rails技能使用這個工具:是否有針對ruby koans的補充指南/答案?

http://github.com/edgecase/ruby_koans

,但我有一些經過測試的麻煩。另外,我不確定自己是否正確地做了一些事情,因爲目標只是爲了通過測試,有很多方法可以通過測試,我可能正在做一些不符合標準的事情。

有沒有辦法確認我是否正確地做事?

一個具體的例子:

在about_nil

def test_nil_is_an_object 
    assert_equal __, nil.is_a?(Object), "Unlike NULL in other languages" 
end 

所以它告訴我,以檢查是否該第二子句是等於一個對象(所以我可以說零是一個對象)或僅把assert_equal true, nil.is_a?(Object),因爲聲明是真實的?

和下一個測試:

def test_you_dont_get_null_pointer_errors_when_calling_methods_on_nil 
    # What happens when you call a method that doesn't exist. The 
    # following begin/rescue/end code block captures the exception and 
    # make some assertions about it. 
    begin 
    nil.some_method_nil_doesnt_know_about 
    rescue Exception => ex 
    # What exception has been caught? 
    assert_equal __, ex.class 

    # What message was attached to the exception? 
    # (HINT: replace __ with part of the error message.) 
    assert_match(/__/, ex.message) 
    end 
end 

即時猜測我應該把在assert_match有關assert_equal「無方法錯誤」的字符串,但什麼?

+0

有趣,不知道該koans,總得試一試。也許尋求幫助,或尋求你認爲不正確的事情的建議,但更具體的,會讓你更好的回答 – Chubas 2010-08-25 06:16:16

回答

9

assert_equal true, nil.is_a?(Object)確實是正確的解決方案。問題是「Ruby中的對象是不是?」,在Ruby的情況下,它們是。因此,爲了傳達主張,你應該斷言測試的真相。

在第二個示例中,當您在nil上調用未定義的方法時,將獲得NoMethodError: undefined method 'foo' for nil:NilClass。因此,異常類是NoMethodError,並且消息是undefined method 'foo' for nil:NilClass。在控制檯中測試失敗的行爲,並查看從中獲得的結果,然後將該知識應用於測試。

+1

感謝您的支持!這是否意味着我必須相信我的直覺,才能知道我所做的是對的?有沒有辦法檢查我所做的是否正確和真實的紅寶石約定? – corroded 2010-08-25 07:25:09

+0

有時候有不止一種正確的方式來表達一個答案,比如真實生活 – 2012-06-24 02:11:41

2

那麼,在舉行典型的TDD格言紅綠重構時,您應該運行測試(可能在單獨的控制檯中使用rake)並查看失敗發生。從那裏,他們已經爲您提供了有關預期內容的幾條信息。

至於風格,koans並沒有真正教這個。你應該找到並閱讀一些用ruby編寫的代碼,以瞭解ruby社區的典型慣例和習慣用法。

+0

你會用什麼文件'rake'? – isomorphismes 2014-04-26 05:35:27

1

我記得我這樣做的時候,我試圖想出來的測試,並試圖把在

<Answer> and <"Answer"> 

需要記住的是,實際的類並不一定要在一個字符串或東西。 所以答案是不是

ex.class, ex.class 

如上建議,把代碼放到IRB並執行它。

(1..5).class == Range 

是一個很大的提示

5

你在命令提示符下運行

ruby path_to_enlightenment.rb 

你改正每次測試後?它會給你很多幫助。

此外,「記住沉默有時候是最好的答案」 - 如果你被難倒了,不要放入任何東西,這個工具將幫助你。

2

樸素是Ruby Koans的關鍵 - 當我開始時,我認爲必須比它更難,但它不是!只要向IRB詢問Koans問你的問題,幾個之後你就會有一種感覺。我寫了一個博客一篇關於它來幫助別人,太:

Ruby Koans Answers