zoukankan      html  css  js  c++  java
  • 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

    原代码类:

    <?php
    
    class 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.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.
    完成。
    

      

  • 相关阅读:
    学习进度——第五周
    构建之法阅读笔记02
    学习进度——第四周
    整型数组——首尾相连
    构建之法阅读笔记01
    二维数组
    学习进度——第三周
    新最大子数组——数量级和数量无限大
    最大子数组求和
    P3388 【模板】割点(割顶)题解 tarjan求割点
  • 原文地址:https://www.cnblogs.com/wangyulu/p/5273122.html
Copyright © 2011-2022 走看看