だから私はカートサービスをシミュレートするという学術的な問題を抱えています。
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
}
CustomCalculator を TDD の方法で実装しました。これらは私のテストの一部です。
@Test
public void FreeItemCostNothing();
public void SpecialItemCostHalf();
public void BulkPurchaseCostsQuater();
等々。
また、CustomCalculator が正常に動作していることは確かです。
しかし、TDD によると、カートを実装するための次のステップは何なのかわかりません。カートが行うことになっているのは、OrderItem のコレクションを管理し、コレクションで getPrice メソッドを折りたたむことだけです。両方のクラスに同じ徹底的なテスト スイートを使用する必要がありますか?
つまり、カートのテストには、次のようなテストも含める必要があります-
@Test
public void TenFreeItemCostNothing();
public void FiveSpecialItemsAndBulkPurchaseCostsHalfAndQuarter();
などなど
ありがとう :)