2013-04-26 186 views
1

在downvote我的問題之前請聽:) 我使用單元測試。我知道他們必須彼此獨立。儘管如何測試書籍庫。第一本書必須創建,然後更新,然後刪除。我有三個單元測試。對這些單元測試有依賴是不是正確?單元測試。關於獨立測試

[TestFixture] 
    public class CompanyRepositoryTests 
    { 
     public void CreateCompany() 
     { 
      // This must be called 1 
     } 

     public void UpdateCompany() 
     { 
      // This must be called 2 
     } 

     public void DeleteCompany() 
     { 
      // This must be called 3 
     } 
    } 
+1

每個測試都必須是獨立的,這不是可選的。測試所需的任何數據,都需要在測試範圍內創建。 – 2013-04-26 12:04:14

+0

所以這意味着我必須在一個方法內調用三個方法創建,更新和刪除讓我們說:「CRUDCompany」? – Sergey 2013-04-26 12:05:59

回答

4

約單元測試的東西(而不是集成測試)是,他們只應該測試單個方法。因此,舉例來說,如果你有一個看起來像這樣的方法:

public void createCompany(Company c) { 
    if (c == null) { 
    throw new NullPointerException(); 
    } 
    database.create(c); 
} 

一個好的測試那樣會測試兩件事情:

  1. 如果null傳入,NullPointerException拋出
  2. 如果非null傳入,database.create()被稱爲

無論database.create()實際上,有用的是一個不同的問題。一個與單元測試數據庫有關的事情。

在你的情況下,按照建議嘲笑底層存儲,並編寫適當的單元測試。

另一方面,在集成測試中,具有依賴關係顯然很好。即使如此,您的測試應該看起來像

  • 測試1:新數據庫:創建一個公司,確保它在那裏。
  • 測試2:新建數據庫:創建一個公司,刪除它,確保它不在。
  • 測試3:新建數據庫:創建一個公司,修改它,確保它的工作成果爲 。

每個測試都應該從頭開始。

+0

謝謝!非常好的方法。我會遵循它。非常感謝你,朋友 – Sergey 2013-04-26 12:52:51

+0

一個簡單的問題。如何確保每次創建新數據庫時創建? – Sergey 2013-04-26 12:57:47

1

在這個練習中,您將學習如何測試修改數據庫CRUD操作。考慮的一個前提是測試不一定按照特定順序運行。另一個是每個測試都可以根據需要多次執行。所以你的測試不應該依賴於以前的測試執行。例如,如果您的測試要刪除數據庫中的記錄,則測試的設置應提供要刪除的記錄。這樣,測試可以重複執行。

Good tutorial about unit tests