0

所以我有一个模拟购物车服务的学术问题。

Cart 支持添加 OrderItem 和计算特定购物车总价的另一个职责。这是通过组合和委托给 IPricingCalculator 来完成的

public class Cart
{
private List<OrderItem> _items;
private IPricingCalculator _pricingCalculator;

public Cart(IPricingCalculator pricingCalculator);
public addItem(OrderItem);

public double totalPrice()
{
double price = 0.0;
for (OrderItem orderItem: _items)
    price += _pricingCalculator.getPrice(orderItem);
}

}

IPricingCalculator 支持 getPrice 方法

public interface IPricingCalculator
{
double getPrice(OrderItem item);
}

CustomPriceCalculator 实现 IPricingCalculator 接口

public class CustomCalculator implements IPricingCalculator
{
private List<IPriceRule> _priceRules;
public double getPrice(OrderItem item); // return the price according to the first rule that matches
}

现在我已经以 TDD 方式实现了 CustomCalculator,这些是我的一些测试:

@Test
public void FreeItemCostNothing();
public void SpecialItemCostHalf();
public void BulkPurchaseCostsQuater();

等等。

而且我很确定 CustomCalculator 工作正常。

但我不明白根据 TDD 应该是我实现购物车的下一步,所有购物车应该做的是管理 OrderItem 的集合并折叠集合上的 getPrice 方法。我应该为这两个课程提供相同的详尽测试套件吗?

即购物车的测试是否也应包括以下此类测试-

@Test
public void TenFreeItemCostNothing();
public void FiveSpecialItemsAndBulkPurchaseCostsHalfAndQuarter();

等等等等

谢谢 :)

4

2 回答 2

0

我认为你最能回答你的问题。

Cart您应该编写测试来测试需要支持的两件事。

@Test
public void AddOrderItemToCart(); /* I don't see these in the interface, but... */
public void DeleteOrderItemFromCart();
public void GetPriceMethodIsCorrectlyCalled();
public void AllOrderItemsArePricedAndTotalCalculated();

这些测试可以通过验证模拟(不确定这是否适用于您使用的语言(Java 或 C#))或通过调用实际实例并确保结果正常来验证调用。您不应该CustomCalculator再次测试 OrderItem 或您的实现,只要它被正确调用即可。

于 2013-09-08T20:04:19.893 回答
0

据我了解您的描述,您已经CustomPriceCalculator以测试驱动的方式实现了您的,这意味着您遵循了这些步骤:

  1. 编写一个失败的单元测试
  2. 使失败的测试通过
  3. 重构

您正面临一个有趣的问题,该问题通常是由于未遵循完整的 TDD 测试周期造成的。这将是:

  1. 编写失败的验收测试
  2. 编写一个失败的单元测试
  3. 使失败的测试通过
  4. 重构
  5. 重复步骤 2-4,直到失败的验收测试通过

验收测试是一个端到端的测试,它应该贯穿整个应用程序堆栈(例如,从 UI 到业务逻辑再到数据库再返回)。这是为您的代码提供结构所必需的。它使您可以定义代码中缺少的部分以及需要实现的协作者。它还创建了一个指南,让您将编程重点放在应用程序的必要部分。

如果您打算学习 TDD,您可能需要花一些时间学习成长中的面向对象软件,由测试指导。它将为您提供使 TDD 正常运行所需的一切。

于 2013-09-09T10:33:43.983 回答