私は 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;
}
さて、私の理解が正しければ:
- シナリオ => 商品が入ったカート
- コンテキスト => sku1 の 1 アイテムを含むカート
- 仕様 => アイテムの削除
- アサーション => 同じ 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.
}
私の理解は正しいですか、それとも正しい方法と間違った方法はありませんか? サブジェクト/シナリオは、テストしている全体的な動作 (つまり、カートからアイテムを削除する) に関連し、各仕様クラスはさまざまなコンテキストでその動作をテストすると仮定しました。