2009-12-25 4 views
6

Je voudrais lancer le test de un fichier bibliothèque de fonctions ...tests fonctions php (non classes) avec NetBeans et PHPUnit

qui est, je n'ai pas une classe, il est juste un fichier avec fonctions d'aide en elle ...

par exemple, je l'ai créé un projet php à ~/www/test

et un fichier ~/www/test/lib/format.php

<?php 

function toUpper($text) { 
    return strtoupper($text); 
} 

function toLower($text) { 
    return strtolower($text); 
} 

function toProper($text) { 
    return toUpper(substr($text, 0, 1)) . toLower(substr($text, 1)); 
} 
?> 

outils -> créer des tests PHPUnit me donne le fol erreur mugissement:

PHPUnit 3.4.5 by Sebastian Bergmann.

Could not find class "format" in "/home/sas/www/test/lib/format.php".

maintenant, si le code I (! à la main) le fichier ~/www/test/tests/lib/FormatTest.php

<?php 
require_once 'PHPUnit/Framework.php'; 
require_once dirname(__FILE__).'/../../lib/format.php'; 

class FormatTest extends PHPUnit_Framework_TestCase { 

    protected function setUp() {} 

    protected function tearDown() {} 

    public function testToProper() { 
    $this->assertEquals(
      'Sebastian', 
      toProper('sebastian') 
    ); 
    } 
} 
?> 

il fonctionne très bien, je peux courir il ...

mais si je sélectionne le fichier de test à partir format.php je reçois

Test file for the selected source file was not found

une idée?

Saludos

sas

ps: Une autre question, est-il un moyen de mettre à jour les tests générés sans avoir à les supprimer manuellement ???

ps2: en utilisant NetBeans 2.8 dev

+0

Pouvez-vous donner des noms de fichiers et des chemins pour les deux fichiers – Yacoby

+0

sûr, il suffit d'éditer la question pour ajouter cette info ... – opensas

Répondre

5

Comment vous avez écrit votre cas de test unitaire est 100% correct. Le problème réside dans la convention commune et la manière dont PHPUnit et Netbeans s'en servent.

La meilleure pratique de nos jours est d'écrire tout votre code d'une manière orientée objet. Ainsi, au lieu d'avoir un fichier PHP plein de fonctions d'utilité comme vous avez, vous enveloppez ces fonctions dans une classe et les avez comme des fonctions statiques. Voici un exemple en utilisant votre code ci-dessus,

<?php 

class Format 
{ 
    public static function toUpper($text) 
    { 
     return strtoupper($text); 
    } 

    public static function toLower($text) 
    { 
     return strtolower($text); 
    } 

    public static function toProper($text) 
    { 
     return self::toUpper(substr($text, 0, 1)) . self::toLower(substr($text, 1)); 
    } 
} 

Vous souhaitez maintenant utiliser vos fonctions comme si,

Format::toProper('something'); 

PHPUnit, et Netbeans, dépendent de cet objet philosophie orientée. Lorsque vous essayez de générer automatiquement un cas de test PHPUnit, PHPUnit recherche dans votre fichier une classe. Il crée ensuite un scénario de test basé sur cette classe et son API publique, et l'appelle ClassNameTest, où ClassName est le nom de la classe testée. Neatbeans suit également cette convention et sait que ClassNameTest est un cas de test PHPUnit pour ClassName, donc crée un lien entre les deux dans l'EDI.

Donc, mon conseil est de toujours utiliser les classes où vous le pouvez. Si vous avez des fonctions utilitaires qui ne dépendent de rien et qui sont utilisées globalement, rendez-les statiques. Je voudrais me débarrasser de vos deux fonctions toUpper() et toLower().Il n'y a pas besoin d'envelopper les fonctions PHP intégrées quand ce n'est pas nécessaire. Il n'y a pas non plus besoin de les tester car ils sont soigneusement testés.

Note du site 2: Il est un peu construit en PHP équivalent à votre fonction toProper() appelée ucfirst().

+1

Ces jours sont révolus depuis longtemps. Je voudrais tester mon php sans OOP. Bien sûr, je pourrais le faire à la main. Mais je préférerais compter sur les avantages d'un cadre de test. Des idées sur comment écrire des tests unitaires en utilisant la programmation procédurale en 2017? –

Questions connexes