2010-04-26 68 views
2

我是新來開發單元測試,我找不到如何測試我有一個現有的類的例子。單元測試示例,在具有必填字段的類上?

該類有一個保存方法,當用戶在UI中單擊保存時,該方法將在數據庫中執行插入或更新操作。但是save方法需要填充字段。還有其他領域沒有。

那麼我該如何正確運行這個測試呢?

試圖將它寫出來..

Give a user 
When user saves object 
Then Field1 is required 
then Field2 is required 
Then Field3 is required 

WhenUserSavesObject() 
object = new object 
object.field1 IsNot Nothing 

類似的東西嗎?

那麼可選的其他領域呢?我如何測試保存方法以確保它能正確使用所有這些值?

正試圖使用​​BDD,但不知道如果我應該嘗試它。

在調用測試方法時,無法找到任何需要很多屬性的類的示例。

回答

1

你沒有告訴你想用哪種語言來實現你的項目和你的測試。例如,使用Groovy & Grails框架爲實現這些測試提供了一個很好的工具集,並且可以很好地作爲一個例子來說明如何實現你所要求的測試。

void testUsernameIsRequiredToValidate() { 
    mockForConstraintsTests User 
    def user = new User(username: "") 
    assertFalse user.validate() 
    assertEquals "blank", user.errors["username"] 
} 

該代碼不言自明。在測試方法的第一行中,我們正在設置環境以在單元測試中爲User類添加驗證功能。之後,我們創建一個新的用戶並根據它的限制進行驗證。最後一行檢查blankfirstname字段的約束導致測試失敗。

class User { 
    String firstname 
    String password 

    static constraints = { 
    username(blank: false) 
    password(blank: false, minSize: 6) 
    } 
} 

擁有多個必填字段來驗證User對象可以在幾個小的類實現爲負測試。對於正面測試,您將構建一個有效的User實例並對其進行驗證。

void testUserWithUsernameAndAMinimumPasswordOfSixCharactersIsValid() { 
    mockForConstraintsTests User 
    def user = new User(username: "admin", password: "secret") 
    assertTrue user.validate() 
} 

如果您正在使用另一種框架和/或語言發展中你可能會感興趣嘲諷遠的依賴和被測打破碼成小零件可測試的話題。

1

如果你只是學習單元測試,恕我直言,你可以選擇一個更簡單的目標爲您的第一次單元測試。使用數據庫進行單元測試要比測試沒有依賴關係的普通對象複雜得多。一次練習和學習一件事情會更好。然而,如果你真的想要解決這個問題,你應該告訴我們你使用的語言,持久性機制,數據庫 - 否則我們只是在黑暗中拍攝。例如。如果你碰巧使用Java,DbUnit是你的朋友。

一般來說,最好的做法是將代碼依賴關係限制在代碼中的一個薄層上,以便讓代碼的其餘部分更易於測試。從你的描述來看,你的班級是否已經是該層的一部分,或者是否可以與數據庫隔離尚不清楚。

+0

Aww我明白了。我現在正在學習一些基礎知識。找到一本好書。 http://www.artofunittesting.com/ 這是VB.Net,我使用微軟的nUnit版本。 數據庫層和業務邏輯在同一個層上,在同一個類中。 我認爲這本書實際上會有所幫助,因爲它現在已經進入了真實世界的情景。謝謝你的幫助。 – Mastro 2010-04-27 19:36:04