2011-04-25 57 views
1

我有一個必須填寫幾個字段的表格。但是,只有一個字段是強制性的。所以,我想出了以下規格:關於功能測試,BDD和TDD的困惑

[Subject(typeof(CompanyHomeController))] 
public class when_the_save_button_is_clicked 
{ 
    private It should_verify_that_the_company_name_has_been_filled; 

    private It should_show_some_text_next_to_the_company_field_if_it_has_not_been_filled; 

    private It should_submit_all_the_details_on_the_form_if_there_are_no_errors; 

    private It should_take_the_user_back_to_the_list_of_companies; 
} 

現在我想實現這一點,但我越來越困惑,因爲它聽起來很像功能測試,我不得不使用類似mvccontrib .watin dlls。我說的確是功能測試嗎?我是否爲BDD制定了「錯誤」規範?

回答

2

我不會擔心太多的定義 - 無論如何BDD的各種測試形式之間存在很多模糊界限。

WRT Watin,我猜你在談論通過瀏覽器進行測試嗎?您可以通過瀏覽器或直接在您的控制器上「皮下」進行測試,這兩種方法都是進行BDD的有效方法。這種選擇更多地取決於你想要測試的內容,你想讓測試運行得有多快,等等。

根據您的規格,我可以看到他們可能有點棘手實施。你可能希望有不同規格的有效/無效的意見,例如:

[Subject(typeof(CompanyHomeController))] 
public class company_form_submitted_with_fields_completed 
{ 
    It should_save_all_the_details_to_the_main_list; 

    It should_take_the_user_back_to_the_company_list_page; 
} 

[Subject(typeof(CompanyHomeController))] 
public class company_form_submitted_with_some_fields_missing 
{ 
    It should_remain_on_the_company_edit_page; 

    It should_warn_that_the_company_field_is_required; 
} 

(注意你不需要的「私人」改性劑,其清除它一點)。

+0

感謝您的回答。我想這是灰色地帶的領域之一,它更像是一門藝術而不是科學。以您擁有的方式更改規格要好得多,而且更容易「實施」。 – DavidS 2011-04-26 18:40:24

1

將BDD視爲「通過示例進行規範」而不是「功能測試」。

但請記住,BDD的目標是達成應該完成的工作,並以示例的形式記錄它,這些示例也可作爲測試指導開發人員運行。

BDD不是系統驗證技術,而是系統規範技術。這很有用,但在有趣的算法中可能不足。

既然它是「通過示例」,你說出你會做什麼,以及它會如何反應。也許你填寫一張表格,然後將公司字段留空。它應該如何反應?現在,也許你填寫那一個,但空白另一個。它應該如何反應?

因爲它是'通過示例說明',它確實需要你講述一系列小故事。

對您有幫助嗎?