2010-07-14 6 views
1

Je voudrais tester une méthode à partir d'une classe abstraite. Dans cette classe existe une méthode abstraite avec est statique.PHPunit mockobject méthode abstraite et statique

J'utilise PHPUnit. Avec les méthodes abstraites normales, cela fonctionne:

phpunit file.php fonctionne.

Mais si le abstractMethod est statique, il affiche:

PHP Erreur fatale: Classe Mock_AbstractClass_6332ae11 contient 1 méthode abstraite et doit donc être déclarée abstraite ou mettre en œuvre les méthodes restantes (AbstractClass :: abstractMethod) dans/usr/local/apache2/php5.3/lib/php/PHPUnit/Framework/TestCase.php (1135): code eval() 'd sur la ligne 33

Répondre

2

Vous ne pouvez pas avoir de méthodes statiques abstraites. Il va générer un message E_STRICT en PHP.

Concevoir une stratégie alternative pour votre implémentation de classe.

0

PHP 5.3 est-il possible d'avoir des méthodes statiques abstraites, discutées ici: Why does PHP 5.2+ disallow abstract static class methods?

PHPUnit 3.5beta les travaux suivants:

<?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.

.

Notez que vous devez utiliser "static ::" et non "self ::" à partir de tout le problème de liaison statique tardive. http://php.net/manual/en/language.oop5.late-static-bindings.php

Questions connexes