爱程序网

PHPUnit 入门案例

来源: 阅读:

了解PHPUnit

本案例是关于创建三角形的一个单元测试入门案例,在netbeans环境中完成,关于在此环境中搭建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

 

原代码类:

 

<?phpclass Triangle{    /**     * 三条边 第一条边     * @var int      */    protected $a;    /**     * 三条边 第二条边     * @var int      */    protected $b;    /**     * 三条边 第三条边     * @var int      */    protected $c;    /**     * 类型     * @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();    }    /**     * 获取类型     */    public function getType()    {        return $this->verifyType()->type;    }    /**     * 验证三边是否有效     * @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;    }    /**     * 验证类型     */    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;    }}

 

 

生成的测试类文件:

<?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.'          );         *          */        /* 实现代码 */        $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.'        );    }    /**     * 测试用例     * @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        ];    }}

这里需要注意,在我们执行“创建/更新测试”后生成的测试文件类与上面会有些不同,这里的测试用例是手动加上去的,这里具体实现可以查看手册里的说明!

 

附执行结果:

"/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.50MbThere 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:472) TriangleTest::testCreate with data set #7 (0, 0, 0)Failed asserting that false is true./var/www/html/phpunit/test/core/triangleTest.php:473) TriangleTest::testCreate with data set #8 (-10, 2, 5)Failed asserting that false is true./var/www/html/phpunit/test/core/triangleTest.php:474) TriangleTest::testCreate with data set #9 (0, 2, 1)Failed asserting that false is true./var/www/html/phpunit/test/core/triangleTest.php:47FAILURES!Tests: 11, Assertions: 10, Failures: 4, Incomplete: 1.完成。

  

 

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助