我有一个表格,其中必须填写几个字段。但是,只有一个字段是强制性的。所以,我提出了以下规范:
[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制定了“错误”的规格?
答案 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?的答案帮助我看清楚事情。