【问题标题】:Const In PHPUnit Test CasePHPUnit 测试用例中的常量
【发布时间】:2016-06-16 16:21:54
【问题描述】:

我的 php 函数有一个 const 限制,如下所示。

 const limit = 5 ;
 function limit_check($no_of_page)
 {
       if($no_of_page < const limit)
       return true;       else    return false;
 }

现在我想使用 PHPUnit 为此编写单元案例,但在单元案例中,我想重置限制,这样如果有人重置限制,我的测试用例就不会失败。如何在我的单元测试函数中设置 php const?

【问题讨论】:

  • 看起来这个限制不是设计成常量的。那么为什么不使用静态属性呢?

标签: php unit-testing phpunit


【解决方案1】:

通常,您出于编码原因设置了此限制,因此,您应该检查并强制执行此限制,因为它可能有存在的原因。但是,如果没有,那么您可能会得到类似以下的内容:

class FOO
{
    const limit = 5;
    private $PageNumberLimit;

    public function __construct($PageLimit = self::limit)
    {
        $this->SetPageLimit($PageLimit);
    }

    public function SetPageLimit($PageLimit)
    {
        $this->PageNumberLimit = $PageLimit;
    }

    public function limit_check($no_of_page)
    {
        if($no_of_page < $this->PageNumberLimit)
            return true;
        else
            return false;
    }
}

然后是测试:

class FOO_TEST extends PHPUnit_Framework_TestCase
{
    protected $FooClass;

    protected function setUp()
    {
        $this->FooClass = new FOO();
    }

    public function testConstantValue()
    {
        $ReflectObject = new ReflectionClass('FOO');
        $this->assertEquals(5, $ReflectObject->getConstant('limit'), 'Test that the default Page Limit of 5 was not changed');
    }

    public function testDefaultLimitUsed()
    {
        $ReflectObject = new ReflectionClass('FOO');
        $this->assertEquals($ReflectObject->getConstant('limit'), $this->FooClass->PageNumberLimit, 'Test that the default Page Limit is used by matching value to constant.');
    }

    public function testlimit_check()
    {
        $this->assertTrue($this->FooClass->limit_check(4), 'Page Number is less than Limit');
        $this->assertFalse($this->FooClass->limit_check(5), 'Page Number is equal to Limit');
        $this->assertFalse($this->FooClass->limit_check(6), 'Page Number is greater than Limit');
    }

    public static function PageNumberDataProvider()
    {
        return array(
            array(4),
            array(5),
            array(6),
            );
    }

    /**
     * @dataProvider PageNumberDataProvider
     */
    public function testSetPageLimitWithConstructor($NumberOfPages)
    {
        $Foo = new FOO($NumberOfPages);         // Create the class using the constructor

        $this->assertTrue($Foo->limit_check($NumberOfPages - 1), 'Page Number is less than Limit');
        $this->assertFalse($Foo->limit_check($NumberOfPages), 'Page Number is equal to Limit');
        $this->assertFalse($Foo->limit_check($NumberOfPages + 1), 'Page Number is greater than Limit');
    }

    /**
     * @dataProvider PageNumberDataProvider
     */
    public function testSetPageLimitWithSetPageLimit($NumberOfPages)
    {
        $this->FooClass->SetPageLimit($NumberOfPages);          // Set the number using the public function

        $this->assertTrue($Foo->limit_check($NumberOfPages - 1), 'Page Number is less than Limit');
        $this->assertFalse($Foo->limit_check($NumberOfPages), 'Page Number is equal to Limit');
        $this->assertFalse($Foo->limit_check($NumberOfPages + 1), 'Page Number is greater than Limit');
    }
}

【讨论】:

    猜你喜欢
    • 2014-08-21
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 2015-10-17
    相关资源
    最近更新 更多