2012-07-09 81 views
1

我一直在做Rails開發很短的時間,但已經相當快地完成了它。我仍然失去的一個領域是寫作測試。我應該如何測試這個模塊?

我明白如何編寫測試,但我永遠不知道應該測試什麼,並且使我很難真正開始編寫自己的測試。

我最近編寫了一個gem,用於我正在開發的項目的API,並且認爲這將是我編寫一些測試的最佳時機。我仍然對我應該測試的東西感到迷茫。

我希望如果我發佈我的一個類與一些方法,有人可能能夠給我一些我應該測試的想法。

我正在使用的API返回JSON對象,所以我所有的方法實際上只是助手,它使GET請求返回到我正在構建的應用程序。我使用HTTParty gem來獲取請求。

第一種方法只是列出了有關特定廣告客戶的一些信息:

module MyModule 

    class User < MyObject 

     # User 
     # This will list information about a specific user 
     # required parameter(s): 
     #  user_id 
     # example: 
     # MyModule.connect("Your API Key") 
     # MyModule::User.list(5) 
     # returns: 
     # Returns a single result with the following properties: 
     # { 
     # "user_name":"blah", 
     # "user_id":253, 
     # "last_login":"2011-03-01" 
     # } 
     def list(user) 
     MyModule.get("https://stackoverflow.com/users/#{user}") 
     end 
    end 
    end 

我最初的猜測是我會測試,以確保此JSON對象回來與正確的屬性,但我不能完全肯定。

我還需要測試以確保傳入方法的參數在那裏,或者是我不應該擔心的事情?

+0

查看源代碼並測試[httparty](https://github.com/jnunemaker/httparty/tree/master/spec)等其他寶石(因爲您正在使用它)。此外,rdoc/yardoc對於最終開發人員非常有用,所以我建議爲這些工具使用正確的文檔和語法。 – jmdeldin 2012-07-10 00:18:41

回答

0

關於測試的事情完全取決於你想要成爲多麼徹底。在理想的世界中,您可以對應用程序的每個方面進行測試。鑑於您可能正在從事一個側面項目,並且您在編程應用程序時花費的時間會更多,所以我認爲基本的流量測試可以滿足您的需求。

是的,檢查正確的JSON屬性將是一個好的開始。

你沒有提到你正在使用的測試套件 - 如果你沒有記住任何東西,我會推薦rspec。

希望幫助,

里根

+0

我實際上使用minitest來做這件事。我寫了一個非常小的測試,以確保我有一個版本號,這樣我就可以習慣最小的工作,但不能真正決定要測試什麼。因爲這是我計劃發佈的寶石,所以我想盡可能多地進行測試。 – user1512631 2012-07-09 18:38:22

1

單元測試應該檢查某個對象或方法的行爲,不反對組成。即使如此,這裏只有幾件事情可以在這裏測試:

  1. GET請求成功(或不)​​。
  2. 你得到有效的JSON(或不)。
  3. 你的記錄沒有被破壞。

您可能應該稍微測試一下。例如,我會測試這個用戶故事:

Given a record with some reasonable fixture data, 
When the record is successfully retrieved 
Then your application does something useful with it. 
0

我覺得幫助時,我不認爲它是一個測試,而是把它當作我的類的行爲的例子。 @ CodeGnome的答案很有用。通過閱讀代碼和描述,你會發現一個顯而易見的行爲方面:你的班級找到關於廣告用戶的登錄信息。 (請原諒我對Ruby和Rails特有的語法缺乏瞭解,要像@CodeGnome一樣做,但要有更具體的例子)。

您的課程「應該檢索廣告用戶的最後登錄日期」。這看起來像一個符合其行爲的描述,並且您可以在此之後命名您的測試方法。

現在想想一些特定的例子。它是否會根據用戶檢索不同的數據?如果用戶以前沒有登錄過,該怎麼辦?如果用戶標識錯誤怎麼辦? MyModule總是可用,或者如果您失去移動連接,它可能不可用?那麼你會怎麼做?你的班級是否「應該增加連接錯誤」?

通過這樣思考,你會發現行爲的不同方面和不同的例子。像RSpec這樣的東西可以幫助你輕鬆地描述這些,或者你可以用just_use_underscored_test_names

如果你沒有行爲的不同方面,你可能有過早的重構/優化和太多的抽象層。

請記住,您正在查看有關該類如何行爲以及爲什麼它很有價值的示例,以便您可以對其進行記錄並使其易於理解。您正在使用它來幫助完善班級的職責,使其保持可維護性。這實際上並不涉及測試。

相關問題