2013-02-04 3 views
3

J'ai une limite const dans ma fonction php comme indiqué ci-dessous.Const Dans PHPUnit Test Case

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

Maintenant, je veux écrire les cas unitaires pour cela en utilisant PHPUnit, mais dans les cas de l'unité que je veux réinitialiser la limite pour que mes cas de test ne parviennent pas si quelqu'un remet à zéro la limite. Comment régler le php const dans ma fonction de test unitaire?

+2

il semble que cette limite n'a pas été conçu pour être * constante *. Alors pourquoi ne pas utiliser une propriété statique à la place? –

Répondre

2

Normalement, vous avez défini cette limite pour une raison de codage. Par conséquent, vous devez vérifier et appliquer cette limite car elle a probablement une raison d'y être. Cependant, sinon, vous pourriez avoir quelque chose comme ce qui suit:

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; 
    } 
} 

Ensuite, les essais:

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'); 
    } 
}