2008-09-15 7 views
13

Je suis un programmeur Java de longue date travaillant sur un projet PHP, et j'essaie d'obtenir PHPUnit et de travailler. Lorsque les tests unitaires en Java, il est courant de mettre des classes de cas de test et les classes ordinaires dans des répertoires distincts, comme celui-ci -Disposition du répertoire pour les tests PHPUnit?

/src 
    MyClass.java 

/test 
    MyClassTest.java 

et ainsi de suite.

Lors de tests unitaires avec PHPUnit, est-il courant de suivre la même structure de répertoires, ou existe-t-il un meilleur moyen de disposer des classes de test? Jusqu'à présent, la seule façon de faire fonctionner correctement l'instruction "include (" MyClass.php ")" est d'inclure la classe de test dans le même répertoire, mais je ne veux pas inclure les classes de test lorsque j'appuie sur production.

+1

Renvoi: [Meilleures pratiques PHPUnit pour organiser des tests (Nov 2011)] (http://stackoverflow.com/q/8313283/367456) – hakre

Répondre

9

Je pense que c'est une bonne idée de garder vos fichiers séparés. J'utilise normalement une structure de dossiers comme celui-ci:

/myapp/src/  <- my classes 
/myapp/tests/  <- my tests for the classes 
/myapp/public/  <- document root 

Dans votre cas, pour inclure la classe dans votre fichier de test, pourquoi passer pas seulement tout le chemin à inclure la méthode?

include('/path/to/myapp/src/MyClass.php'); 

ou

include('../src/MyClass.php'); 
4

Vous devez modifier le include_path de PHP pour qu'il sache où trouver MyClass.php lorsque vous l'avez include() lors de votre test unitaire.

Vous pourriez avoir quelque chose comme ça en haut de votre fichier de test (précédent include):

 

set_include_path(get_include_path() . PATH_SEPARATOR . "../src"); 
 

Ceci ajoute votre répertoire src sur le chemin d'inclusion et devrait vous permettre de garder votre code réel distinct votre code de test.

1

Je mets mon cas de test suivant la source dans un fichier avec le même nom, mais une extension .phpt. Le script de déploiement filtre simplement * .phpt quand ils poussent à la production.

2

La réponse de Brian Phillips ne va pas assez loin, selon mon expérience. Vous ne savez pas quel est le répertoire courant lorsque vos tests sont exécutés par PHPUnit. Vous devez donc référencer le chemin absolu du fichier de classe de test dans votre expression set_include_path(). Comme ceci:

set_include_path(get_include_path() . PATH_SEPARATOR . 
         dirname(__FILE__) . "/../src"); 

Ce fragment peut être placé dans son propre SetupIncludePath.php de fichier d'en-tête et inclus dans les fichiers de test avec un require_once, de sorte que les suites de test ne recevront pas le chemin à plusieurs reprises.

Questions connexes