国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

phpunit PHP單元測試的利器

wyk1184 / 1036人閱讀

摘要:是的單元測試框架。單元測試在軟件開發中越來越受到重視,測試先行編程極限編程和測試驅動開發在實踐中被廣泛。利用單元測試,也可以實現契約式設計。現在第二個測試也能通過啦你也可以使用契約式設計的風格,只需使用類提供的靜態斷言方法編寫契約條件。

PHPUnit是PHP的單元測試框架。單元測試在軟件開發中越來越受到重視,測試先行編程、極限編程和測試驅動開發在實踐中被廣泛。利用單元測試,也可以實現契約式設計。

接下來,我們通過一個例子說明如何利用PHPUnit來實踐測試驅動開發。

假設我們需要編寫一個銀行賬戶的功能:BankAccount。該功能用于設置銀行賬戶收支,存取現金,必須確保:

銀行賬戶初始化時余額為0。

余額不能為負數。

在編寫代碼之前,我們先為BankAccout類編寫測試:

require_once "BankAccount.php";

class BankAccountTest extends PHPUnit_Framework_TestCase
{
    protected $ba;

    protected function setUp()
    {
        $this->ba = new BankAccount;
    }

    public function testBalanceIsInitiallyZero()
    {
        $this->assertEquals(0, $this->ba->getBalance());
    }

    public function testBalanceCannotBecomeNegative()
    {
        try {
            $this->ba->withdrawMoney(1);
        }

        catch (BankAccountException $e) {
            $this->assertEquals(0, $this->ba->getBalance());

            return;
        }

        $this->fail();
    }

    public function testBalanceCannotBecomeNegative2()
    {
        try {
            $this->ba->depositMoney(-1);
        }

        catch (BankAccountException $e) {
            $this->assertEquals(0, $this->ba->getBalance());

            return;
        }

        $this->fail();
    }
}

現在我們編寫為了讓第一個測試testBalanceIsInitiallyZero()通過所需要的代碼:

class BankAccount
{
    protected $balance = 0;

    public function getBalance()
    {
        return $this->balance;
    }
}

現在第一個測試可以通過了,第二個還不行:

phpunit BankAccountTest
PHPUnit 3.7.0 by Sebastian Bergmann.

.
Fatal error: Call to undefined method BankAccount::withdrawMoney()

為了讓第二個測試通過,我們需要實現withdrawMoney()depositMoney()setBalance()方法。這些方法在違反約束條件時,會拋出一個BankAccountException

class BankAccount
{
    protected $balance = 0;

    public function getBalance()
    {
        return $this->balance;
    }

    protected function setBalance($balance)
    {
        if ($balance >= 0) {
            $this->balance = $balance;
        } else {
            throw new BankAccountException;
        }
    }

    public function depositMoney($balance)
    {
        $this->setBalance($this->getBalance() + $balance);

        return $this->getBalance();
    }

    public function withdrawMoney($balance)
    {
        $this->setBalance($this->getBalance() - $balance);

        return $this->getBalance();
    }
}

現在第二個測試也能通過啦~

phpunit BankAccountTest
PHPUnit 3.7.0 by Sebastian Bergmann.

...

Time: 0 seconds


OK (3 tests, 3 assertions)

你也可以使用契約式設計的風格,只需使用PHPUnit_Framework_Assert類提供的靜態斷言方法編寫契約條件。下面例子中,如果斷言不成立,就會拋出一個PHPUnit_Framework_AssertionFailedError。這種方式可以增加你的代碼的可讀性。但是這也意味著你需要PHPUnit會成為你的運行時依賴。

class BankAccount
{
    private $balance = 0;

    public function getBalance()
    {
        return $this->balance;
    }

    protected function setBalance($balance)
    {
        PHPUnit_Framework_Assert::assertTrue($balance >= 0);

        $this->balance = $balance;
    }

    public function depositMoney($amount)
    {
        PHPUnit_Framework_Assert::assertTrue($amount >= 0);

        $this->setBalance($this->getBalance() + $amount);

        return $this->getBalance();
    }

    public function withdrawMoney($amount)
    {
        PHPUnit_Framework_Assert::assertTrue($amount >= 0);
        PHPUnit_Framework_Assert::assertTrue($this->balance >= $amount);

        $this->setBalance($this->getBalance() - $amount);

        return $this->getBalance();
    }
}

原文 Test-Driven Development with PHPUnit
翻譯 SegmentFault

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20628.html

相關文章

  • PHP單元測試框架PHPUnit使用

    摘要:以前在學習開發時有專門寫過的單元測試的文章,開發學習之單元測試,今天再總結下怎么在中使用單元測試。是一個用編程語言開發的開源軟件,是一個單元測試框架。單元測試框架經常會包含每個測試的報告,以及給出你已經覆蓋到的代碼覆蓋率。 以前在學習IOS開發時有專門寫過Objective-C的單元測試的文章,IOS開發學習之單元測試,今天再總結下怎么在PHP中使用單元測試。 一、前言 在這篇文章中,...

    Bryan 評論0 收藏0
  • PHPUnit實踐一(初識)

    摘要:另外一些單元測試可能會測試負向路徑的場景,保證代碼不僅會產生錯誤,而且是預期的錯誤。是一個面向程序員的測試框架,這是一個的體系結構的單元測試框架。 本系列教程所有的PHPUnit測試基于PHPUnit6.5.9版本,Lumen 5.5框架 前置 日常我們的普通用到的測試: 代碼直接echo,debug等方法測試 -> 跟蹤細節斷點型測試 log日志輔助測試 -> 跟蹤細節斷點型測試 ...

    weapon 評論0 收藏0
  • PHPUnit實踐一(初識)

    摘要:另外一些單元測試可能會測試負向路徑的場景,保證代碼不僅會產生錯誤,而且是預期的錯誤。是一個面向程序員的測試框架,這是一個的體系結構的單元測試框架。 本系列教程所有的PHPUnit測試基于PHPUnit6.5.9版本,Lumen 5.5框架 前置 日常我們的普通用到的測試: 代碼直接echo,debug等方法測試 -> 跟蹤細節斷點型測試 log日志輔助測試 -> 跟蹤細節斷點型測試 ...

    hss01248 評論0 收藏0
  • PHP 單元測試

    摘要:上面的規定是必須遵守的,如果代碼沒有遵守規定不會把他當做單元測試代碼。每個單元測試類以被測試的類名開頭。每個單元測試函數應該為被測試函數名結尾。函數可能在測試環境不可執行,那么無法獲取的執行結果,從而無法對進行單元測試。 本文首發于 https://jaychen.cc/article/34作者 Jaychen showImg(https://segmentfault.com/img/...

    娣辯孩 評論0 收藏0
  • 如何愉快PhpStorm中進行PHPUnit單元測試和Xdebug斷點調試?

    摘要:配置執行程序點擊那個同步的小圖標,如果看到就說明配置有效指定模塊配置選擇,搜索,左側選擇,點擊新增一個。 前言 如果你想做個接口測試,但并不想公開內部接口 如果你只是想對自己封裝的某塊代碼做個小測試 如果你想要編寫代碼邊調試,又不想操作 Postman 或前端的功能來調用 API 本文暫時僅介紹在 Laravel 和 Comoposer Library 項目中如何配置 PHPUni...

    Flink_China 評論0 收藏0

發表評論

0條評論

wyk1184

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<