iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
Modern Web

每天一篇文章系列 第 4

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

耶!


參加鐵人賽發現原來組員們不少對網站設計有興趣。
推薦兩個跟網站設計有關的台灣社群(也順便跟大家要收藏):


上一篇
03. Unit Test x PHPUnit x FizzBuzz
下一篇
05. Feature Test x HTTP Test x API Test
系列文
每天一篇文章30

尚未有邦友留言

立即登入留言