2010-07-14 3 views
1

추상 클래스에서 메서드를 테스트하고 싶습니다. 이 클래스에는 정적 인 추상 메소드가 있습니다.PHPunit mockobject 추상 및 정적 메서드

PHPUnit을 사용합니다. 일반적인 추상 메서드를 사용하면 작동합니다.

<?php 
abstract class AbstractClass 
{ 
    public function concreteMethod() 
    { 
    return $this->abstractMethod(); 
    } 

    public abstract function abstractMethod(); 
} 

class AbstractClassTest extends PHPUnit_Framework_TestCase 
{ 
    public function testConcreteMethod() 
    { 
    $stub = $this->getMockForAbstractClass('AbstractClass'); 
    $stub->expects($this->any()) 
     ->method('abstractMethod') 
     ->will($this->returnValue(TRUE)); 

    $this->assertTrue($stub->concreteMethod()); 
    } 
} 
?> 

phpunit file.php가 작동합니다.

그러나 abstractMethod가 정적 인 경우는 표시

PHP 치명적인 오류 : 클래스 Mock_AbstractClass_6332ae11 1 개 추상 메소드를 포함하고, 따라서 추상적 인 선언해야합니다 또는/usr/지방에 남아있는 방법 (AbstractClass :: abstractMethod)를 구현/apache2/php5.3/lib/php/PHPUnit/Framework/TestCase.php (1135) : 33 행의 eval() '코드

답변

2

추상 정적 메서드를 사용할 수 없습니다. PHP에서 E_STRICT 메시지를 생성합니다.

클래스 구현을위한 대체 전략을 수립하십시오. PHP 5.3로

0

는 여기에서 논의 추상적 정적 메서드를 가지고 할 수 있습니다 : 다음 작품 3.5beta phpunit을 가진 Why does PHP 5.2+ disallow abstract static class methods?

: 당신이 사용할 필요가

<?php 

class AbstractClassTest extends PHPUnit_Framework_TestCase 
{ 
    public function testConcreteMethod() 
    { 
    $stub = new myStub; 
    $this->assertTrue($stub->concreteMethod()); 
    } 
} 


abstract class AbstractClass 
{ 
    public function concreteMethod() 
    { 
    return static::abstractMethod(); 
    } 

    public static abstract function abstractMethod(); 
} 

class myStub extends AbstractClass { 
    public static function abstractMethod() { 
     return true; 
    } 
} 

?> 

PHPUnit 3.5.0beta1 by Sebastian Bergmann.

.

"정적 ::"아닌 "자체 :: :: 정적 바인딩 문제를 전체 늦게. http://php.net/manual/en/language.oop5.late-static-bindings.php