2017-07-29 117 views
2

我想開始一個寵物項目,以便從頭開始創建Web應用程序,並且我想要使用BDD和TDD。 我在「面向對象的軟件增長:通過測試引導」中讀到,我們應該從系統的最薄片開始,它允許我們有一個整個應用程序的步行骨架,所以我們可以有一個快速反饋,並開始想知道生產/部署程序。如何使用BDD從頭開始創建Web應用程序?

在BDD中寫入驗收測試之後,我會轉向更細粒度的測試,例如單元測試。

想象的Web應用程序是要找到誰更接近你的超級英雄,我會寫一個BDD場景如:

When I insert my information 
Then the system should tell that the superhero I'm more similar to is "Batman" 

我無視目的的認證,這樣我們可以專注於系統的主要功能。這種情況假設後面有一個工作基礎架構,以便上面的場景可以自動複製,端到端。

假設我想在不同的層(Web服務器,應用程序服務器和數據庫)中佈置Web應用程序,我該如何實現此測試? 假設我想使用Selenium WebDriver模擬用戶,必須先模擬哪些圖層以及首先要測試哪個圖層? 我也考慮過從測試API開始,但這不會是一個端到端的測試,但我們只會部分測試應用程序。

回答

1

黃瓜是一個很好的BDD框架。用戶界面/硒測試可能有點不靈活,所以我建議他們少一些(請參閱測試金字塔)。 就我個人而言,我認爲我會按照您對初學者的建議在API級別工作,然後您已將UI與應用程序分離。

在API級別編寫一些應用程序的黃瓜集成測試(BDD),描述高級功能。我不會嘲笑這個級別,因爲你希望看到整個應用程序在這一點上工作。

然後,當你實現這些,使用TDD,在這裏你會想要嘲笑外部像文件IO /數據庫。一旦所有的TDD單元測試完成,整體功能就會通過。繼續,直到完成所有功能。

繼續這樣做,然後在API級別有一套可靠的單元測試和一套可靠的集成(功能)測試。

一旦完成(或平行得到一個垂直切片),使用'快樂的一天'情景硒測試開始用戶界面,所有真正需要在這裏測試的是用戶界面代碼,並正確連接到應用程序,作爲主要的應用程序已經過測試。

只是我的看法 - 希望它有幫助。

+0

你會使用與API測試相同的場景嗎? – acejazz

+0

有效的是。該API使用集成和單元測試進行測試。其他UI測試也將接觸到的API,如果在制度層面做 – MikeJ

0

我會爲此使用Cucumber(但我非常有偏見),我會先從應用程序的核心部分編寫一些場景開始。

一些重要的規則來寫你的場景時遵循

  1. 使用您的域語言
  2. 只談你正在做什麼和爲什麼它的重要
  3. 不要談論你如何做的事情。

因此,你的超級英雄網站,你可以開始考慮你需要做的事情開始。

通常當你發現一個資源(超級英雄),你將有你可以探索一些基本的CRUD操作,所以

  • 創造的超級英雄
  • 編輯超級英雄
  • 刪除超級英雄
  • COMPARING一個超級英雄**這是你的關鍵出發點**

讓我們開始工作比較一個超級英雄場景

Given there are superheroes Batman and Superman And I am like Batman When I find my superhero Then I should see I am like Batman

現在讓我們開始實施這一方案。這裏最重要的一點是不要將所有代碼放在步驟定義中。相反,使每個步驟定義調用輔助方法。

注:以下所有的代碼將紅寶石

Given 'there are superheroes Batman and Superman' do create_superhero batman create_superhero superman end

現在我們可以進入BDD紅/綠測試周期。

因此,我們將開始得到這樣的錯誤No method found create_superheroundefined constant batman。我們可以在步驟定義中使用輔助模塊來解決這些問題。

module CreateSuperHeroStepHelper 
    def create_superhero(attrs={}) 
    Superhero.create(attrs) 
    end 

    def batman 
    { 
     ... 
    } 
    end 

    ... 

end 

而從這段代碼中,我們可以開始處理我們應用程序的域對象。超級英雄。

爲了得到這一步的工作,你必須與你的潛在的Web框架交互。一旦你有它的工作,以最基本的形式,你可以進入下一步。

沿途你將有各種各樣的選擇,你下一步怎麼辦的方法。如果你堅持在這個核心場景中工作,你必須聰明的實現你的實現。如果您決定處理看起來像先決條件的情景,例如用戶帳號,創建超級英雄,輸入你的超級英雄特徵,添加超級英雄特徵。然後,你應該結束了,你可以使用你的核心方案(例如你必須create_superhero)的工具,但它會需要更長的時間才能到您的應用程序的核心。

沒有必要要考慮的單元測試,層或嘲諷這裏。這就是關於你如何做的事情的低級細節。只要你在你的web框架中有一些基本的能力,你應該開始探索你的域名,並使用BDD創建簡單的工具,你可以用它來探索你的超級英雄世界。

祝你好運

+0

我得到了這一點,我真正體會到了答案,但我的問題是關於具體的Web應用程序,即從什麼層的測試應該開始。我認爲這是測試覆蓋率,穩定性(端到端場景有點不穩定)和測試層次之間的平衡。 – acejazz

+1

答案適用於Web應用程序(現在我寫的所有內容)。 BDD不是關於測試,而是關於發現行爲和推動發展,這意味着在開始考慮覆蓋和實施之前,你必須這樣做。當你發現行爲時,你應該從交互開始(在情景中的時候)。在Web應用程序中,這是用戶和瀏覽器(主要是)之間的交互。所以你的'whens'應該使用瀏覽器。您的Givens可以更靈活,並且可以在設置狀態時繞過瀏覽器。 – diabolist

相關問題