我想大部分的人學測試不是想用在寫 leetcode 吧,因此我們來模擬一下購物車。
我們來寫一個有點霸道的購物車,這個購物車只有兩個功能:
根據這兩個需求我們設計了一個購物車商品類別,有 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);
}
耶!
參加鐵人賽發現原來組員們不少對網站設計有興趣。
推薦兩個跟網站設計有關的台灣社群(也順便跟大家要收藏):