7
votes

Comment puis-je dans PHP Re-Créer ma base de données (pour les tests d'unités par exemple)

Comment puis-je à partir de PHP, recréer ma base de données, peut-être insérer des données par défaut. Actuellement, j'avais l'intention d'utiliser le comportement des tests d'unités.

J'utilise la doctrine 2, Zend Framework 1.11, zend_test code> pour les tests d'unités p>

Je pourrais utiliser le cli p> xxx pré> p > Ou p> xxx pré>

Je cherche un remplacement PHP, jusqu'à présent trouvé Ce p>

mais il ressemblera à quelque chose comme p> xxx pré>

et je Vous ne voulez pas vraiment avoir à spécifier les classes de modèle, en particulier dans le développement lorsqu'ils peuvent changer. Il ne devrait que lire à partir de toutes les classes spécifiées dans ... ci-dessous ... Tout comme avec le CLI, vous n'avez pas besoin de spécifier les classes que vous souhaitez? P>

$driverImpl = $config->newDefaultAnnotationDriver(array(realpath('../models')));
$config->setMetadataDriverImpl($driverImpl);


5 commentaires

(référence) Chapitre en PHPUnit sur les tests de base de données


@Gordon, merci, je pense que ce sera la bonne façon d'unité tester mes modèles, seule chose est au lieu d'une connexion PDO, comment puis-je utiliser la connexion de la doctrine? J'utilise Doctrine 2


J'utilise essentiellement la même configuration que vous, sauf que je tire la liste des noms de classes sur une config, ce qui est plus facile à entretenir. Cependant, j'ai découvert que l'appelant dropschema () et CreateSchema () à chaque test est vraiment coûteux et une grande suite de tests prend pour toujours courir. L'utilisation de luminaires PHPUNIT est beaucoup plus rapide. Je vais devoir vérifier également l'extension de Benjamin.


@Bryan M., mais les accumulations s'occuperont-elles des changements de schéma de base de données? Oui, je ne changerai probablement pas le schéma de la base de données à chaque fois, mais c'est juste au cas où.


Ils ne le feront pas. Mon schéma change assez souvent que l'exécution d'une migration manuelle n'est pas trop gênante. Je me cache également mon schéma à un * .sql qui peut faire la réinsertion légèrement plus rapidement. Il suffit de ne pas exécuter de schéma-régénération à chaque test, et vous devriez aller bien.


3 Réponses :


0
votes

doctrine prend en charge Appareils . Essayez-le.


1 commentaires

Voici un tutoriel pour Symfony: Projet Symfony .Org / Blog / 2009/10/05 / Symfony-and-doctrine-2 Vous devez faire vos propres modèles manuellement et les perserveiller.



5
votes

Vous pouvez utiliser

  • Extension de la doctrine de Benjamin Eberlei à PHPUnit chez Github

    L'extension PHPUnit pour la doctrine offre plusieurs hameçons dans l'extension de la base de données PHPunits et offre un moyen très pratique de tester votre code de doctrine 2 sur une base de données.

    Il existe quelques exemples dans le Readme, y compris un exemple qui montre comment créer le schéma de base de données à la volée. Benjamin Eberlei est une doctrine 2 contributeur essentielle.

    Voir également le guide ultime de B. Eberlei pour tester la DB avec PHPUNIT


0 commentaires

1
votes

Parce que vous avez défini le chemin d'accès aux modèles lors de la configuration de l'entitéManager, vous pouvez créer le schéma au code sans avoir à redéclairer ce chemin (et sans avoir à déclarer chaque classe). Pour ce faire, vous devez faire référence à votre instance configurée d'EntityManager et obtenir une référence à ClassMetaDatafactory que vous pouvez ensuite appeler ClassMetaDatafactory # GetallMeData () à partir de.

Voici un exemple où j'ai une classe de bootstrap statique qui me permet Pour obtenir une référence à l'entitémanager de n'importe où et que je recrée le schéma sur l'appel d'installation () dans les tests de l'unité: xxx


0 commentaires