关于功能测试,BDD和TDD的困惑

时间:2011-04-25 13:42:05

标签: bdd mspec

我有一个表格,其中必须填写几个字段。但是,只有一个字段是强制性的。所以,我提出了以下规范:

 [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 dll的东西。我是对的,它确实是功能测试吗?我是否为BDD制定了“错误”的规格?

3 个答案:

答案 0 :(得分: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;
}

(注意你不需要'私人'修饰符,这会稍微清理它。)

答案 1 :(得分:1)

将BDD视为"通过示例进行规范"不是"功能测试。"

但请记住,BDD的目标是在应该做什么上达成一致,并以示例的形式记录它,这些示例也可作为测试来指导开发人员。

BDD不是系统验证技术,而是系统规范技术。它很有用,但在有趣算法的情况下可能不够用。

因为它是"以示例"你说明你会做什么,以及它会如何反应。也许您填写表格,然后将公司字段留空。它应该如何反应?现在也许你填写那个,但另一个空白。它应该如何反应不同?

因为它的例子是'它真的需要你讲一系列小故事。

这有用吗?

答案 2 :(得分:0)

做了一些研究后,

这澄清了我的许多误解,http://www.msteched.com/2010/NorthAmerica/DPR302。希望它可以帮助那里的人。此外,Amir What is the most mature BDD Framework for .NET?的答案帮助我看清楚事情。