View Issue Details

IDProjectCategoryView StatusLast Update
0001123Common[All Projects] Generalpublic2016-04-08 21:11
ReporterXenosAssigned ToXenos 
PrioritylowSeverityminorReproducibilityhave not tried
Status CloseResolutionfixed 
Product Version1.0.4 
Target VersionFixed in Version1.2.0 
Summary0001123: Le Skelgen de PHPUnit ne crée pas le test dans le bon dossier
DescriptionLe test n'est pas créé dans le bon sous-dossier, mais directement dans "test/phpunit" (au lieu de "tests/phpunit/vendor/.../xTest.php").

A confirmer.

Le fix serait de créer un fichier bat (comme pour phpunit.bat) qui corrigerait cette erreur, en déplaçant le fichier une fois généré, ou, plus sereinement, en corrigeant les paramètres d'appel de SkelGen (il y a surement un argument erroné, genre des "\" au lieu de "/" ou un soucis de casse).
Steps To ReproduceOuvrir un projet dans NetBeans, puis ouvrir un fichier PHP se trouvant dans un sous-dossier (ie "php/vendor/.../x.php"). Créer son test unitaire associé (clic droit sur le fichier, "Tools", "Create/Update unit Test" & choisir PHPUnit).
TagsNo tags attached.
Attach Tags

Activities

Xenos

Xenos

2016-04-04 19:53

administrator   ~0001684

A confirmer quand même dans un vrai cas d'utilisation, et pas juste dans des petits essais.
Xenostom

Xenostom

2016-04-05 14:26

developer   ~0001688

Last edited: 2016-04-08 21:08

Le test est créé dans le bon dossier par NetBeans 8.0.2 (Alstom), donc c'est peut-être une autre erreur de structure (mauvais skelgen [j'ai pris celui de common, directement]; mauvais dossier de test [c'est test/ ici et non test/phpunit]; mauvais namespace/nom de classe [on a un vendor name ici, "webefu", que je n'ai pas sur NB 8.1]...)
Xenos

Xenos

2016-04-06 21:37

administrator   ~0001693

Last edited: 2016-04-08 21:08

Je ne comprends pas ces lignes dans PHPSkelgen:

$this->inSourceFile = str_replace(
        $this->inClassName['fullyQualifiedClassName'],
        $this->inClassName['className'],
        $inSourceFile
    );

    $this->outSourceFile = str_replace(
        $this->outClassName['fullyQualifiedClassName'],
        $this->outClassName['className'],
        $outSourceFile
    );


Ce remplacement à la con est la cause du problème: les espaces de nom de PHP utilisent des "\" et Windows utilise aussi des "\" pour les chemins des fichiers, donc on a bien une suppression du chemin du namespace dans le chemin du fichier (et donc, le fichier généré est à la racine tests/phpuniut plutôt que dans le bon sous dossier).

Pour le contourner, je vais préalablement remplacer les "\" de Windows par des "/". Du coup, le Skelgen ne trouvera plus le namespace de la classe générée dans son chemin d'accès, et donc, il ne fera plus ce remplacement de merde.

A Alstom, le fichier était à la bonne place car le fichier PHP testé se trouvait dans un namespace ne correspondant pas au chemin d'accès du fichier.

Issue History

Date Modified Username Field Change
2016-04-04 19:52 Xenos New Issue
2016-04-04 19:52 Xenos Status New => Accepted
2016-04-04 19:53 Xenos Note Added: 0001684
2016-04-04 19:53 Xenos Assigned To => Xenos
2016-04-04 19:53 Xenos Status Accepted => Understood
2016-04-05 14:26 Xenostom Note Added: 0001688
2016-04-06 00:15 Xenos Status Understood => In progress
2016-04-06 21:37 Xenos Note Added: 0001693
2016-04-06 21:38 Xenos Status In progress => Ready
2016-04-06 21:38 Xenos Resolution open => fixed
2016-04-08 21:08 AutoUpdater Status Ready => Resolved
2016-04-08 21:08 AutoUpdater Fixed in Version => 1.2.0
2016-04-08 21:11 Xenos Status Resolved => Close