成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

phpunit PHP單元測試的利器

wyk1184 / 1044人閱讀

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

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

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

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

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

余額不能為負(fù)數(shù)。

在編寫代碼之前,我們先為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();
    }
}

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

class BankAccount
{
    protected $balance = 0;

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

現(xiàn)在第一個測試可以通過了,第二個還不行:

phpunit BankAccountTest
PHPUnit 3.7.0 by Sebastian Bergmann.

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

為了讓第二個測試通過,我們需要實現(xiàn)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();
    }
}

現(xiàn)在第二個測試也能通過啦~

phpunit BankAccountTest
PHPUnit 3.7.0 by Sebastian Bergmann.

...

Time: 0 seconds


OK (3 tests, 3 assertions)

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

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/20628.html

相關(guān)文章

  • PHP單元測試框架PHPUnit使用

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

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

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

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

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

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

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

    娣辯孩 評論0 收藏0
  • 如何愉快PhpStorm中進(jìn)行PHPUnit單元測試和Xdebug斷點調(diào)試?

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

    Flink_China 評論0 收藏0

發(fā)表評論

0條評論

wyk1184

|高級講師

TA的文章

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