2009-12-25 13 views
6

me gustaría ejecutar pruebas unitarias para un archivo de biblioteca de funciones ...de prueba (no clases) con NetBeans y PHPUnit

, es decir, que no tienen una clase, es sólo un archivo con funciones de ayuda que está dentro ...

por ejemplo, que he creado un proyecto php en ~/www/prueba

y ~/www/prueba archivo/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)); 
} 
?> 

herramientas -> crear pruebas PHPUnit me da el siguiente mugido de error:

PHPUnit 3.4.5 by Sebastian Bergmann.

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

ahora, si el código I (! a mano) el archivo ~/www/test/pruebas/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') 
    ); 
    } 
} 
?> 

funciona bien, puedo correr que ...

pero si selecciono archivo de prueba de format.php me sale

Test file for the selected source file was not found

alguna idea?

saludos

sas

ps: Otra pregunta, ¿hay una manera de actualizar las pruebas generadas sin tener que eliminarlos manualmente ???

PS2: utilizando NetBeans 2.8 dev

+0

Puede dar nombres de archivos y rutas para los dos archivos – Yacoby

+0

seguro, acaba de editar la pregunta para agregar esa información ... – opensas

Respuesta

5

¿Cómo usted ha escrito su caso de prueba unidad es 100% correcto. El problema radica en la convención común y en cómo PHPUnit y Netbeans dependen de ellos.

La mejor práctica en estos días es escribir todo su código de forma orientada a objetos. Entonces, en lugar de tener un archivo PHP lleno de funciones de utilidad como las que tiene, las envuelve en una clase y las tiene como funciones estáticas. Aquí hay un ejemplo usando el código anterior,

<?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)); 
    } 
} 

Ahora tendría que utilizar sus funciones como tal,

Format::toProper('something'); 

PHPUnit y Netbeans, dependen de esta filosofía orientada a objetos. Cuando intenta generar automáticamente un caso de prueba PHPUnit, PHPUnit busca en su archivo una clase. Luego crea un caso de prueba basado en esta clase y es API pública, y lo llama al ClassNameTest, donde ClassName es el nombre de la clase que se está probando.

Neatbeans también sigue esta convención y sabe que ClassNameTest es un caso de prueba PHPUnit para ClassName, por lo que crea un enlace entre los dos en el IDE.

Por lo tanto, mi consejo es usar siempre las clases donde pueda. Si tiene funciones de utilidad que no dependen de nada y se usan globalmente, conviértalas en funciones estáticas.

Nota al margen: me deshago de sus dos funciones toUpper() y toLower().No es necesario ajustar las funciones integradas de PHP cuando no es necesario. Tampoco hay necesidad de probarlos ya que están completamente probados.

nota Sitio 2: Hay una especie de construida en PHP equivalente a la función de su toProper() llamada ucfirst().

+1

Estos días se han ido. Me gustaría probar mi unidad php sin OOP. Por supuesto que podría hacer esto a mano. Pero preferiría confiar en los beneficios de un marco de prueba. ¿Ideas sobre cómo escribir pruebas unitarias usando programación de procedimientos en 2017? –

Cuestiones relacionadas