2011-04-25 38 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不是系统验证技术,而是系统规范技术。这很有用,但在有趣的算法中可能不足。

既然它是“通过示例”,你说出你会做什么,以及它会如何反应。也许你填写一张表格,然后将公司字段留空。它应该如何反应?现在,也许你填写那一个,但空白另一个。它应该如何反应?

因为它是'通过示例说明',它确实需要你讲述一系列小故事。

对您有帮助吗?