PHP 单元测试未能通过所有测试

我正在创建一个带有一些单元测试的类,但我无法通过一些测试。示例如下所示。


单元测试

class OffsetTest extends \PHPUnit\Framework\TestCase

{



   /**

    * @dataProvider getIllegalOffsets

    * @expectedException \InvalidArgumentException

    * @param $offset

    */

   public function testIllegalParameters($offset)

    {

        new \OffsetEncodingAlgorithm($offset);


        $this->fail('Exception should be thrown');

    }

    /**

     * Data provider for {@link OffsetTest::testIllegalParameters()}

     * @return array

     */

    public function getIllegalOffsets()

    {

        return [

            [-1],

        ];

    }

}

我的课

<?php


class Offset

{

    public function __construct(int $offset = 13)

    {

       try {

            if ($offset < 0) {

                throw new Exception('Exception should be thrown');

            }

        } catch (Exception $e) {

            return $e->getMessage();

        }

        $this->offset = $offset;

    }

}

测试进度是这样的

http://img4.mukewang.com/6168e4b800016c8a02460077.jpg

杨魅力
浏览 185回答 1
1回答

繁花如伊

在测试testIllegalParameters()期望返回异常的 时,您不必使用try-catch块。只需if简单地在条件中抛出异常。其次抛出测试用例中定义的正确类型的异常 InvalidArgumentExceptionclass Offset{&nbsp; &nbsp; public function __construct(int $offset = 13)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if ($offset < 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new InvalidArgumentException('Offset should be greater than equal to zero');&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this->offset = $offset;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP