gpt4 book ai didi

testing - 将 "story"转换为 MSpec 规范

转载 作者:行者123 更新时间:2023-11-28 21:14:04 25 4
gpt4 key购买 nike

我一直在学习 BDD,在尝试了一些框架后,我决定在我的最新项目中使用 MSpec。

在查看了一些示例后,我不确定如何识别场景和上下文。

以下面的故事为例(摘自 Rob Connery's Kona example ):

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

现在,如果我的理解是正确的:

  • 场景 => 购物车中有元素
  • Context => 带有 1 件 sku1 的购物车
  • 规范 => 删除一个项目
  • 断言 => 应该删除所有具有相同 SKU 的商品

但是,看看其他例子,似乎应该这样声明:

  • 场景 => 将商品移至购物车
  • Context => 当购物车中有 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.
}

我的理解是否正确,还是没有对错之分?我的假设是主题/场景与我们正在测试的整体行为相关(即从购物车中删除商品),并且每个规范类都在不同的上下文中测试该行为。

最佳答案

Ben,我认为你给出的第二个例子更“正确”。当您考虑上下文(when 类)时,请确保它包含与场景关联的所有内容。大多数时候,只有一个“ Action ”(在您的示例中,删除一个项目)的规范表示在特定上下文中发生该 Action 后系统应处于的状态。当然可以有不同的先决条件(购物车是空的,购物车只有一件商品等),这些构成了不同的上下文。

澄清一下,删除项目不是观察,而是操作。

因此,我认为您可以为概述的功能编写以下规范:

[Subject("Removing item from shopping cart")]
public class when_removing_item_from_empty_cart {
It should_be_empty;
}

[Subject("Removing item from shopping cart")]
public class when_removing_item_from_cart_with_one_item_of_another_SKU {
It should_still_contain_the_item;
}

[Subject("Removing item from shopping cart")]
public class when_removing_item_from_cart_with_two_items {
It should_be_empty;
}

// probably more ;-)

使用SubjectAttribute 来表示功能/场景。您还可以使用 TagsAttribute 添加更多元数据(并可能过滤测试运行)。

我会故意选择不使用基类。根据我的经验,甚至有更好的方法来进行复杂的设置(Fluent API、Machine.Fakes 行为配置)。 DRY 在这里并不真正适用:当规范失败时,您希望拥有属于规范的所有内容,而不是导航类层次结构以查找可能在某处徘徊的 Establish否则。

此外,您可能会发现 this sample app有趣,使用 MSpec 开发和测试。

关于testing - 将 "story"转换为 MSpec 规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com