2011-09-27 71 views
1

大約半年前,我開始深入單元測試。我進入了TDD(或者我認爲的那樣),現在我想開發一個MVC應用程序行爲驅動。 驗收測試(真正的端到端)的概念對我來說是新的,因爲我的上一個項目沒有在驗收測試環境中運行。BDD和ASP.NET MVC - 尋找高速公路

我開始閱讀一些很好的文章,特別是Sanderson的http://blog.stevensanderson.com/2010/03/03/behavior-driven-development-bdd-with-specflow-and-aspnet-mvc/,並且通過閱讀他關於該主題的書來支持我的MVC技能。

我使用SpecFlow和SimpleBrowser進行端到端測試。 通過導航欄駕駛導航是一塊蛋糕,但我現在卡住了。 我的目標是實現用戶帳戶,以進一步創建文章和評論。駕駛註冊過程讓我頭痛。鑑於此功能的文件:

Feature: User accounts 
    In order to customize and influence page content 
    As a user 
    I want to able to create an own user account 

Scenario: Create a user 
    Given I am on the /Account/Create page 
    When I fill out the registration formular as follows 
    | NickName | EmailAddress     | 
    | test123 | [email protected] | 
    And I click the "Create" button 
    And I clicked the link in the authentication mail 
    Then I should be on the root page 
    And I should see the message "Welcome test123!" 

我真的不能弄清楚如何提供必要的測試環境(在本例中,郵件服務器)並進行測試不太脆(想重新標記「創建」按鈕的「提交」)。更不用說在捕捉生成器中編織,以防止自動創建用戶(諷刺)。也許我只是在想太多,你實際上不應該在TDD中,但有時我只是盯着屏幕,想着我的下一個測試。


那麼......在文本牆後的實際問題:我應該如何實現這種行爲?

  • 玉碎UI水平測試,並實現採集邏輯
  • 回落到控制器級別的測試需要重構
  • 你見識一下

回答

1

我不會結合點擊創建按鈕並點擊確認鏈接進行一次測試。我會完成第一個測試(點擊創建按鈕),因爲我應該看到一些消息說,檢查我的電子郵件。如果你想測試其餘的行爲,你應該在給定確認URL並點擊它的情況下創建另一個測試,你應該看到歡迎頁面。

+0

但是從哪裏可以獲得端到端場景中第二次測試的確認鏈接?你真的碰到你的測試數據庫嗎? –

+0

這取決於你,你可以運行代碼來生成一個新的用戶和確認鏈接,然後將它傳遞給你的測試,或者你甚至可以嘲笑支票以查看兩種情況(成功和失敗)。 –

2

任何其他方式我不能說什麼是正確的或在這裏錯了,所以我只會說我做了什麼,因爲它對我來說工作得很好。

我使用SpecFlow來測試我的服務層。在ASP.net MVC中,這將是控制器。正如你所提到的那樣,這種UI測試非常脆弱,所以在使用某種先進的JavaScript UI時我只會重複它。

這樣一來,我的測試堆棧看起來是這樣的:

  1. NUnit的測試,對於較複雜的algorythms模型
  2. SpecFlow測試控制器。這可以確保意見能夠收到他們應該做的事情,並確保這些模式按預期進行交互。
  3. 我的JavaScript的模型,我主要用與淘汰賽JS(這兩個看起來像是天生的一對)
  4. 手冊驗收測試(非常粗粒度並沒有太多的這些)QUnit的測試,有據可查
  5. 少數(很少)自動化UI與華廷測試爲更先進的UI

也就是說,編寫了測試的約75%是用於項目2(SpecFlow)和15%對項目3(QUnit) 。這就是它似乎爲我工作,但任何建議也非常歡迎。