我一直在学习 BDD,在尝试了一些框架之后,我决定在我的最新项目中使用 MSpec。
在查看了一些示例后,我不确定如何识别场景和上下文。
以下面的故事为例(取自Rob Connery 的 Kona 示例):
Removing a shopping cart item
* All items of same SKU are removed. TotalItems decremented by Quantity
* When quantity is 0 nothing happens
* When quantity is negative, items are removed, TotalItems stays at 0 (never negative)
这是相关的规范:
[Subject("Cart with items in it")]
public class when_removing_item : with_cart_with_1_item_of_sku1 {
It should_remove_all_items_with_same_sku;
It should_not_remove_anything_when_sku_not_in_cart;
It should_not_remove_more_items_than_are_in_cart_resulting_in_negative_totalitems;
}
现在,如果我的理解是正确的:
- 场景 => 里面有物品的购物车
- 上下文 => 带有 1 件 sku1 的购物车
- 规范 => 删除一个项目
- 断言 => 应该删除所有具有相同 sku 的项目
但是,查看其他示例似乎应该这样声明:
- 场景 => 将商品移至购物车
- 上下文 => 当购物车中有 1 件商品时
- 规范 => 删除一个项目
- 断言 => 应该删除所有具有相同 sku 的项目
测试应该是:
[Subject("Removing an item from cart")]
public class when_removing_an_item_from_cart_with_items : with_cart_with_1_item_of_sku1 {
It should_remove_all_items_with_same_sku;
// etc.
}
我的理解是正确的,还是没有正确和错误的方法?我的假设是,主题/场景与我们正在测试的整体行为(即从购物车中移除商品)相关,并且每个规范类都在不同的上下文中测试该行为。