04. Unit Test x Cart Class

我想大部分的人学测试不是想用在写 leetcode 吧,因此我们来模拟一下购物车。

我们来写一个有点霸道的购物车,这个购物车只有两个功能:

  1. 可以加入商品
  2. 可以计算商品数量

根据这两个需求我们设计了一个购物车商品类别,有 id、数量、名称、价钱 四个属性。
一个购物车类别可以用 Collection 储存商品,并且有加入商品跟计算数量两个方法。

class CartItem implements Arrayable, Jsonable
{
    public $id;
    public $qty;
    public $name;
    public $price;
    
    public function __construct($id, $name, $price, $qty) { ... }
    
    public function toArray() { ... }
}

不论你是要先写再补测试还是要测试驱动开发都可以。
这次我先写购物车逻辑:

class Cart
{
    public $itemCollection;

    public function __construct()
    {
        $this->itemCollection = new Collection();
    }

    public function addItem(CartItem $item)
    {
        $this->itemCollection->push($item->toArray());
        return true;
    }

    public function countItems()
    {
        return $this->itemCollection->sum('qty');
    }

}

再补测试:

public function test_cart_addItem()
{
    $item = new CartItem(1, 'apple', 15, 1);
    $cart = new Cart();
    
    $isTrue = $cart->addItem($item);

    self::assertTrue($isTrue);
}

public function test_cart_countItems()
{
    $expected = 6;
    $item1 = new CartItem(1, 'apple', 15, 3);
    $item2 = new CartItem(2, 'banana', 6, 3);
    $cart = new Cart();
    $cart->addItem($item1);
    $cart->addItem($item2);

    $actual = $cart->countItems();

    self::assertSame($expected , $actual);
}

耶!


参加铁人赛发现原来组员们不少对网站设计有兴趣。
推荐两个跟网站设计有关的台湾社群(也顺便跟大家要收藏):


<<:  乐观锁 vs. 悲观锁

>>:  DAY 7 『 TableView 』Part2

【day25】上传多张照片(下)

连假第二天,在这边先祝大家连假快乐啦,那延续昨天,我们现在已经把String的List拿到了,现在...

Day24:检查登入人数

国庆连假中,假日只想耍废玩 game,不想进修QQ,但为了避免断赛,还是加减推一些东西,等明後天再来...

Day 19 Azure machine learning: workspace and compute group- 从零开始

Azure machine learning: workspace and compute grou...

[Day12] Face Detection - 使用OpenCV & Dlib:Dlib MMOD

好酒沉瓮底,精彩在最後;只是要付出一点点代价。 本文开始 前面提到过,使用OpenCV &...

Day 16 (Ps)

1.钢笔工具去背 (影片Ps5) (1)用钢笔画出要去背的物件 a.拉,按着左键不要放>Alt...