2017-07-11 1 views
1

Je migre depuis PHPUnit 4.5 où les tests s'exécutent et passent bien.PHPUnit_Framework_MockObject_Generator non trouvé

Dans PHPUnit 4.5, nous avons utilisé PHPUnit_Framework_MockObject_Generator qui maintenant, évidemment, n'existe pas dans PHPUnit 6.

Nous utilisons comme ceci:

public static function getMock() 
{ 
    $generator = new PHPUnit_Framework_MockObject_Generator(); 
    $mock = $generator->generate(
     'ezcDbHandlerMysql', 
     array(), 
     '', 
     true, 
     true 
    ); 

    if (class_exists($mock['mockClassName'], false) === false) { 
     eval($mock['code']); 
    } 

    $args = array(
     'host' => TEST_DB_HOST, 
     'database' => TEST_DB_NAME, 
     'username' => TEST_DB_USER, 
     'password' => TEST_DB_PASS, 
     'driver-opts' => array(PDO::ATTR_PERSISTENT => TEST_DB_PERSISTENCE), 
    ); 

    $class = new ReflectionClass($mock['mockClassName']); 
    $object = $class->newInstanceArgs(array($args)); 

    return $object; 
} 

Comment puis-je réécrire ce pour ne pas donner une classe Erreur non trouvée? Je ne sais pas ce que l'équivalent PHPUnit 6 de PHPUnit_Framework_MockObject_Generator est.

Répondre

2

Vous avez 2 options, vous pouvez toujours utiliser sournoisement votre ancien code en l'éteignant avec le MockObjectGenerator à espace de noms utilisé dans getMockClass(). Si vous suivez the manual, vous pouvez utiliser createMock et getMockBuilder() et définir la maquette par programme. Je trouve que cette dernière offre plus de commodité car je n'ai pas besoin de définir un ensemble de paramètres à leurs valeurs par défaut afin d'obtenir le n-ième argument dont je me soucie réellement, par exemple. lorsque vous essayez de désactiver l'appel du constructeur d'origine. Donc, la mise à niveau vers getMockBUilder pourrait être un bon choix pour vous.

Puisque vous devez mettre à jour vos usages fictifs de toute façon, vous pouvez également désactiver la bibliothèque de simulation que vous utilisez complètement. PHPUnit vient bundles avec Prophecy que je préfère pour la plupart des cas d'utilisation. C'est une librairie opionée donc faire certaines choses est plus difficile qu'avec la librairie PHPUnit_Mock, mais j'utilise habituellement ceci comme un motivateur pour refactoriser le code pour ces cas. Il y a aussi d'autres bibliothèques de simulation comme Mockery que vous voudrez peut-être consulter.