iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
0
自我挑戰組

單元測試開發購物車功能系列 第 4

Day04: 將商品重構為物件

  • 分享至 

  • xImage
  •  

先上程式碼

namespace Recca0120\Cart\Tests;

use Recca0120\Cart\Item;
use PHPUnit\Framework\TestCase;

class ItemTest extends TestCase
{
    /** @test */
    public function 測試商品屬性()
    {
        $attributes = [
            'name' => '商品01', 
            'price' => 100, 
            'quantity' => 2
        ];

        $item = new Item($attributes);

        $this->assertEquals($attributes, $item->toArray());
    }
}
// src/Item.php

namespace Recca0120\Cart;

class Item
{
    private $attributes;

    public function __construct($attributes = [])
    {
        $this->attributes = $attributes;
    }

    public function toArray()
    {
        return $this->attributes;
    }
}

這樣就完成簡單的一個商品物件的程式
但希望程式能再描述清楚一些
所以再來進行程式碼的改造

// tests/ItemTest.php

namespace Recca0120\Cart\Tests;

use Recca0120\Cart\Item;
use PHPUnit\Framework\TestCase;

class ItemTest extends TestCase
{
    /** @test */
    public function 測試商品屬性()
    {
        $attributes = [
            'name' => '商品01', 
            'price' => 100, 
            'quantity' => 2
        ];

        $item = new Item($attributes);

        $this->assertEquals($attributes, $item->toArray());
    }

    /** @test */
    public function 使用mehtod來設定屬性()
    {
        $attributes = [
            'name' => '商品01', 
            'price' => 100, 
            'quantity' => 2
        ];
        
        $item = new Item();

        $item->setName($attributes['name']);
        $this->assertSame($attributes['name'], $item->getName());

        $item->setPrice($attributes['price']);
        $this->assertSame($attributes['price'], $item->getPrice());

        $item->setQuantity($attributes['quantity']);
        $this->assertSame($attributes['quantity'], $item->getQuantity());

        $this->assertEquals($attributes, $item->toArray());
    }
    
}
// src/Item.php

namespace Recca0120\Cart;

class Item
{
    private $attributes;

    public function __construct($attributes = [])
    {
        $this->attributes = $attributes;
    }

    public function setName($name)
    {
        $this->attributes['name'] = $name;

        return $this;
    }

    public function getName()
    {
        return $this->attributes['name'];
    }

    public function setPrice($price)
    {
        $this->attributes['price'] = $price;

        return $this;
    }

    public function getPrice()
    {
        return $this->attributes['price'];
    }

    public function setQuantity($quantity)
    {
        $this->attributes['quantity'] = $quantity;

        return $this;
    }

    public function getQuantity()
    {
        return $this->attributes['quantity'];
    }

    public function toArray()
    {
        return $this->attributes;
    }
}

這樣就完成了商品物件的基本型態
為什麼要加這些 method 呢?
純粹是為了 ide 更容易閱讀 ...
這樣以後使用這個物件的時候就可以不用看 doc 了 XDD

今天就先暫時寫這些內容,
Day05 要再來挑戰用最小修改測試案例的方法來進行重構


上一篇
Day 03: 第一次重構
下一篇
Day05: 將商品重構到購物車
系列文
單元測試開發購物車功能12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Lucas Yang
iT邦新手 4 級 ‧ 2019-10-02 18:03:32

錯字:

----------------------v
public function 使用mehtod來設定屬性()

我要留言

立即登入留言