亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
PHPUnit 入門(mén)案例,phpunit入門(mén)案例
首頁(yè) 后端開(kāi)發(fā) php教程 PHPUnit 入門(mén)案例,phpunit入門(mén)案例_PHP教程

PHPUnit 入門(mén)案例,phpunit入門(mén)案例_PHP教程

Jul 12, 2016 am 08:57 AM
項(xiàng)目開(kāi)發(fā)

PHPUnit 入門(mén)案例,phpunit入門(mén)案例

了解PHPUnit

本案例是關(guān)于創(chuàng)建三角形的一個(gè)單元測(cè)試入門(mén)案例,在netbeans環(huán)境中完成,關(guān)于在此環(huán)境中搭建phpunit這里不再描述,可以參考以下資料完成搭建工作:

http://www.cnblogs.com/x3d/p/phpunit-in-netbeans8.html

https://phpunit.de/manual/current/zh_cn/installation.html

https://github.com/sebastianbergmann/phpunit-skeleton-generator

?

原代碼類(lèi):

?

<?php

class Triangle
{

    /**
     * 三條邊 第一條邊
     * @var int 
     */
    protected $a;

    /**
     * 三條邊 第二條邊
     * @var int 
     */
    protected $b;

    /**
     * 三條邊 第三條邊
     * @var int 
     */
    protected $c;

    /**
     * 類(lèi)型
     * @var string 
     */
    protected $type;

    /**
     * 等邊
     */
    const TYPE_EQUILATERAL = 'Equilateral';

    /**
     * 等腰
     */
    const TYPE_ISOSCELES = 'Isosceles';

    /**
     * 普通
     */
    const TYPE_ORDINARY = 'Ordinary';

    public function __construct($a = 0, $b = 0, $c = 0)
    {
        $this->initSide($a, $b, $c);
    }

    /**
     * 初始化三邊
     * @param int $a
     * @param int $b
     * @param int $c
     */
    protected function initSide(&$a = 0, &$b = 0, &$c = 0)
    {
        $this->a = intval($a);
        $this->b = intval($b);
        $this->c = intval($c);
        return $this;
    }

    /**
     * 組建
     */
    public function create($a, $b, $c)
    {
        return $this->initSide($a, $b, $c)->verifySideIsValid();
    }

    /**
     * 獲取類(lèi)型
     */
    public function getType()
    {
        return $this->verifyType()->type;
    }

    /**
     * 驗(yàn)證三邊是否有效
     * @return boolean
     */
    protected function verifySideIsValid()
    {
        if (intval($this->a) <= 0 || intval($this->b) <= 0 || intval($this->c) <= 0) {
            return false;
        }

        if ($this->a + $this->b <= $this->c) {
            return false;
        }
        if ($this->a + $this->c <= $this->b) {
            return false;
        }
        if ($this->b + $this->c <= $this->a) {
            return false;
        }
        if ($this->a - $this->b >= $this->c) {
            return false;
        }
        if ($this->a - $this->c >= $this->b) {
            return false;
        }
        if ($this->b - $this->c >= $this->a) {
            return false;
        }
        return true;
    }

    /**
     * 驗(yàn)證類(lèi)型
     */
    protected function verifyType()
    {
        if ($this->isEquilateral()) {
            $this->type = self::TYPE_EQUILATERAL;
            return $this;
        }
        if ($this->isIsosceles()) {
            $this->type = self::TYPE_ISOSCELES;
            return $this;
        }
        $this->type = self::TYPE_ORDINARY;
        return $this;
    }

    /**
     * 是否為等邊三角形
     */
    protected function isEquilateral()
    {
        return (($this->a == $this->b ) && ($this->b == $this->c)) ? true : false;
    }

    /**
     * 是否為等腰三角形
     */
    protected function isIsosceles()
    {
        return (($this->a == $this->b ) || ($this->b == $this->c) || ($this->a == $this->c)) ? true : false;
    }

}

生成的測(cè)試類(lèi)文件:

<?php

/**
 * Generated by PHPUnit_SkeletonGenerator on 2016-03-13 at 19:49:12.
 */
class TriangleTest extends PHPUnit_Framework_TestCase
{

    /**
     * @var Triangle
     */
    protected $object;

    /**
     * Sets up the fixture, for example, opens a network connection.
     * This method is called before a test is executed.
     */
    protected function setUp()
    {
        $this->object = new Triangle;
    }

    /**
     * Tears down the fixture, for example, closes a network connection.
     * This method is called after a test is executed.
     */
    protected function tearDown()
    {
        
    }

    /**
     * @dataProvider addDataProvider
     * @covers Triangle::create
     * @todo   Implement testCreate().
     */
    public function testCreate($a, $b, $c)
    {
        // Remove the following lines when you implement this test.
        /**
          $this->markTestIncomplete(
          'This test has not been implemented yet.'
          );
         * 
         */
        /* 實(shí)現(xiàn)代碼 */
        $this->assertTrue($this->object->create($a, $b, $c));
    }

    /**
     * @covers Triangle::getType
     * @todo   Implement testGetType().
     */
    public function testGetType()
    {
        // Remove the following lines when you implement this test.
        $this->markTestIncomplete(
                'This test has not been implemented yet.'
        );
    }

    /**
     * 測(cè)試用例
     * @return array
     */
    public function addDataProvider()
    {
        return [
            [3, 4, 5], //yes
            [2, 2, 2], //yes
            [8, 10, 8], //yes
            [2, 3, 4], //yes
            [1, 2, 3], //no
            [5, 6, 7], //yes
            [8, 8, 15], //yes
            [0, 0, 0], //no
            [-10, 2, 5], //no
            [0, 2, 1], //no
        ];
    }

}

這里需要注意,在我們執(zhí)行“創(chuàng)建/更新測(cè)試”后生成的測(cè)試文件類(lèi)與上面會(huì)有些不同,這里的測(cè)試用例是手動(dòng)加上去的,這里具體實(shí)現(xiàn)可以查看手冊(cè)里的說(shuō)明!

附執(zhí)行結(jié)果:

"/usr/bin/php" "/usr/local/bin/phpunit" "--colors" "--log-junit" "/tmp/nb-phpunit-log.xml" "--bootstrap" "/var/www/html/phpunit/test/bootstrap.php" "/usr/local/netbeans-8.1/php/phpunit/NetBeansSuite.php" "--" "--run=/var/www/html/phpunit/test/core/triangleTest.php"
PHPUnit 5.2.10 by Sebastian Bergmann and contributors.

....F..FFFI                                                       11 / 11 (100%)

Time: 105 ms, Memory: 10.50Mb

There were 4 failures:

1) TriangleTest::testCreate with data set #4 (1, 2, 3)
Failed asserting that false is true.

/var/www/html/phpunit/test/core/triangleTest.php:47

2) TriangleTest::testCreate with data set #7 (0, 0, 0)
Failed asserting that false is true.

/var/www/html/phpunit/test/core/triangleTest.php:47

3) TriangleTest::testCreate with data set #8 (-10, 2, 5)
Failed asserting that false is true.

/var/www/html/phpunit/test/core/triangleTest.php:47

4) TriangleTest::testCreate with data set #9 (0, 2, 1)
Failed asserting that false is true.

/var/www/html/phpunit/test/core/triangleTest.php:47

FAILURES!
Tests: 11, Assertions: 10, Failures: 4, Incomplete: 1.
完成。

  

?

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1108859.htmlTechArticlePHPUnit 入門(mén)案例,phpunit入門(mén)案例 了解 PHPUnit 本案例是關(guān)于創(chuàng)建三角形的一個(gè)單元測(cè)試入門(mén)案例,在 netbeans 環(huán)境中完成,關(guān)于在此環(huán)境中搭...
本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

Laravel 教程
1597
29
PHP教程
1488
72
Vue大型項(xiàng)目中實(shí)現(xiàn)模塊化開(kāi)發(fā)指南 Vue大型項(xiàng)目中實(shí)現(xiàn)模塊化開(kāi)發(fā)指南 Jun 09, 2023 pm 04:07 PM

在現(xiàn)代化的Web開(kāi)發(fā)中,Vue作為一款靈活、易上手且功能強(qiáng)大的前端框架,被廣泛應(yīng)用于各種網(wǎng)站和應(yīng)用程序的開(kāi)發(fā)中。在開(kāi)發(fā)大型項(xiàng)目時(shí),如何簡(jiǎn)化代碼的復(fù)雜度,使項(xiàng)目更易于維護(hù),是每個(gè)開(kāi)發(fā)者必須面對(duì)的問(wèn)題。而模塊化開(kāi)發(fā),可以幫助我們更好地組織代碼,提高開(kāi)發(fā)效率和代碼可讀性。下面,我將分享一些在Vue大型項(xiàng)目中實(shí)現(xiàn)模塊化開(kāi)發(fā)的經(jīng)驗(yàn)和指南:1.分工明確在一個(gè)大型項(xiàng)目中

如何進(jìn)行Java開(kāi)發(fā)項(xiàng)目的前端與后端分離 如何進(jìn)行Java開(kāi)發(fā)項(xiàng)目的前端與后端分離 Nov 03, 2023 pm 12:59 PM

如何進(jìn)行Java開(kāi)發(fā)項(xiàng)目的前端與后端分離隨著互聯(lián)網(wǎng)的快速發(fā)展,以及用戶(hù)對(duì)于Web應(yīng)用體驗(yàn)的不斷提升,前端與后端分離的開(kāi)發(fā)模式逐漸成為了主流。在Java開(kāi)發(fā)項(xiàng)目中,更是有著廣泛的應(yīng)用。那么,如何進(jìn)行Java開(kāi)發(fā)項(xiàng)目的前端與后端分離呢?本文將從概念解釋、開(kāi)發(fā)流程、技術(shù)選型以及優(yōu)勢(shì)與挑戰(zhàn)等方面進(jìn)行闡述。一、概念解釋前端與后端分離是一種開(kāi)發(fā)方式,它將用戶(hù)界面與業(yè)務(wù)邏

實(shí)用技巧分享:Vue3+Django4全新技術(shù)項(xiàng)目開(kāi)發(fā) 實(shí)用技巧分享:Vue3+Django4全新技術(shù)項(xiàng)目開(kāi)發(fā) Sep 10, 2023 pm 12:17 PM

近年來(lái),前端技術(shù)發(fā)展迅猛,其中Vue.js作為一款優(yōu)秀的前端框架備受關(guān)注。而隨著Vue.js3的正式發(fā)布以及Django4的即將到來(lái),結(jié)合兩者開(kāi)發(fā)全新的技術(shù)項(xiàng)目無(wú)疑是一個(gè)能夠突破技術(shù)瓶頸、提升項(xiàng)目開(kāi)發(fā)效率的好方案。本文將分享一些實(shí)用技巧,幫助開(kāi)發(fā)者在Vue3+Django4的技術(shù)項(xiàng)目開(kāi)發(fā)過(guò)程中更加得心應(yīng)手。首先,要開(kāi)始一個(gè)全新的Vue3+Django4項(xiàng)目,

Golang模板編程實(shí)踐:利用模板高效完成Golang項(xiàng)目開(kāi)發(fā) Golang模板編程實(shí)踐:利用模板高效完成Golang項(xiàng)目開(kāi)發(fā) Jan 20, 2024 am 08:21 AM

Golang模板編程實(shí)踐:在Golang中高效地利用模板完成項(xiàng)目開(kāi)發(fā),需要具體代碼示例摘要:隨著Golang在軟件開(kāi)發(fā)領(lǐng)域的不斷發(fā)展,越來(lái)越多的開(kāi)發(fā)者開(kāi)始關(guān)注并使用Golang進(jìn)行項(xiàng)目開(kāi)發(fā)。在Golang中,模板編程是一個(gè)非常重要的技術(shù),能夠幫助開(kāi)發(fā)者高效地完成項(xiàng)目開(kāi)發(fā)。本文將介紹如何在Golang中利用模板進(jìn)行項(xiàng)目開(kāi)發(fā),并提供具體的代碼示例。引言:Gola

掌握核心技術(shù):Go語(yǔ)言項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)總結(jié) 掌握核心技術(shù):Go語(yǔ)言項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)總結(jié) Nov 02, 2023 pm 02:55 PM

掌握核心技術(shù):Go語(yǔ)言項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)總結(jié)近年來(lái),隨著互聯(lián)網(wǎng)行業(yè)的快速發(fā)展,各種新的編程語(yǔ)言也紛紛出現(xiàn),并成為開(kāi)發(fā)者們的新寵。其中,Go語(yǔ)言作為一門(mén)開(kāi)源的靜態(tài)編譯型語(yǔ)言,以其并發(fā)性能好、執(zhí)行效率高等優(yōu)勢(shì),備受眾多開(kāi)發(fā)者的喜愛(ài)。作為一個(gè)Go語(yǔ)言開(kāi)發(fā)者,我在多個(gè)項(xiàng)目中進(jìn)行了實(shí)踐,積累了一些經(jīng)驗(yàn)和總結(jié)。在本文中,我將分享一些關(guān)于Go語(yǔ)言項(xiàng)目開(kāi)發(fā)的核心技術(shù)和經(jīng)驗(yàn),希望對(duì)

踩過(guò)的坑:Go語(yǔ)言項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)與教訓(xùn) 踩過(guò)的坑:Go語(yǔ)言項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)與教訓(xùn) Nov 03, 2023 am 08:14 AM

踩過(guò)的坑:Go語(yǔ)言項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)與教訓(xùn)在軟件開(kāi)發(fā)的道路上,每個(gè)開(kāi)發(fā)者都會(huì)不可避免地踩過(guò)一些坑。當(dāng)然,對(duì)于Go語(yǔ)言的開(kāi)發(fā)者來(lái)說(shuō)也不例外。本文將分享我在使用Go語(yǔ)言進(jìn)行項(xiàng)目開(kāi)發(fā)過(guò)程中所踩過(guò)的坑,希望能給其他開(kāi)發(fā)者帶來(lái)一些經(jīng)驗(yàn)和教訓(xùn)。不同版本的Go語(yǔ)言在使用Go語(yǔ)言進(jìn)行項(xiàng)目開(kāi)發(fā)時(shí),我們必須關(guān)注Go語(yǔ)言的版本。不同版本之間可能存在一些語(yǔ)言上的差異或者API的變動(dòng),這些

突破瓶頸:Go語(yǔ)言項(xiàng)目開(kāi)發(fā)的經(jīng)驗(yàn)總結(jié) 突破瓶頸:Go語(yǔ)言項(xiàng)目開(kāi)發(fā)的經(jīng)驗(yàn)總結(jié) Nov 02, 2023 pm 02:49 PM

作為一種相對(duì)新興的編程語(yǔ)言,Go語(yǔ)言在近年來(lái)的發(fā)展中受到了越來(lái)越多的關(guān)注。特別是在項(xiàng)目開(kāi)發(fā)方面,Go語(yǔ)言有著優(yōu)勢(shì),因?yàn)樗绕渌Z(yǔ)言更適合開(kāi)發(fā)高性能、并發(fā)、分布式的系統(tǒng)。但是,即使使用Go語(yǔ)言,也會(huì)遇到項(xiàng)目開(kāi)發(fā)中的瓶頸和挑戰(zhàn),因此在本文中,我們將分享一些經(jīng)驗(yàn),以幫助突破這些瓶頸。一、學(xué)習(xí)和掌握Go語(yǔ)言:在開(kāi)始項(xiàng)目開(kāi)發(fā)之前,必須首先掌握Go語(yǔ)言的基礎(chǔ)知識(shí)和編程技

Go語(yǔ)言項(xiàng)目開(kāi)發(fā)的常見(jiàn)問(wèn)題與解決方法 Go語(yǔ)言項(xiàng)目開(kāi)發(fā)的常見(jiàn)問(wèn)題與解決方法 Nov 03, 2023 pm 01:55 PM

Go語(yǔ)言作為一種高性能、簡(jiǎn)潔易用的編程語(yǔ)言,越來(lái)越多的開(kāi)發(fā)者開(kāi)始選擇它作為項(xiàng)目開(kāi)發(fā)的首選語(yǔ)言。然而,在實(shí)際的項(xiàng)目開(kāi)發(fā)過(guò)程中,我們也會(huì)遇到一些常見(jiàn)的問(wèn)題。本文將介紹一些這樣的問(wèn)題,并提供相應(yīng)的解決方法,幫助開(kāi)發(fā)者更好地應(yīng)對(duì)這些挑戰(zhàn)。問(wèn)題一:依賴(lài)管理在Go語(yǔ)言的項(xiàng)目開(kāi)發(fā)中,依賴(lài)管理是一個(gè)常見(jiàn)的問(wèn)題。由于Go語(yǔ)言的模塊化特性,項(xiàng)目往往會(huì)依賴(lài)于許多第三方包和庫(kù)。而如

See all articles