1

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

 [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 制定了“错误”的规范?

4

3 回答 3

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;
}

(请注意,您不需要“私人”修饰符,它会稍微清理一下)。

于 2011-04-26T16:40:40.447 回答
1

将 BDD 视为“示例规范”而不是“功能测试”。

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

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

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

因为它是“举例说明”,所以它确实需要您讲述一系列小故事。

这有帮助吗?

于 2015-05-22T19:57:24.637 回答
0

经过一番研究,

这澄清了我的很多误解,http://www.msteched.com/2010/NorthAmerica/DPR302。希望它可以帮助那里的人。此外,Amir 的回答.NET 最成熟的 BDD 框架是什么?帮助我看得更清楚。

于 2011-04-26T08:17:00.737 回答