0% encontró este documento útil (0 votos)
543 vistas56 páginas

Pruebas Unitarias para Los Lenguajes de Programación PHP y JavaScript Con Las Herramientas PHPUnit y QUnit

El mantenimiento de la calidad del software impide el desarrollo de software de ritmo rápido así como muchos ciclos de prueba que son necesarios para garantizar productos de calidad. Existen pruebas unitarias para diferentes entornos, entre ellos se pueden incluir PHPUnit para PHP y QUnit para Javascript, de los cuales hablaremos en esta investigación, se explicará cómo trabajan, algunas características de estos y sus funcionalidades.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
543 vistas56 páginas

Pruebas Unitarias para Los Lenguajes de Programación PHP y JavaScript Con Las Herramientas PHPUnit y QUnit

El mantenimiento de la calidad del software impide el desarrollo de software de ritmo rápido así como muchos ciclos de prueba que son necesarios para garantizar productos de calidad. Existen pruebas unitarias para diferentes entornos, entre ellos se pueden incluir PHPUnit para PHP y QUnit para Javascript, de los cuales hablaremos en esta investigación, se explicará cómo trabajan, algunas características de estos y sus funcionalidades.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 56

Escuela de Computacin

ASEGURAMIENTO DE LA CALIDAD DEL SOFTWARE

Investigacin
Pruebas unitarias
PHPUnit PHP y QUnit Javascript

Profesora
Marlen Trevio Villalobos

Responsables:
Araya Gmez Jeimy Pamela 201158146
Pacheco Corella Uriel Isaac 201132743
Salas Aguilar Jean Carlos 2011

San Carlos, 29 de septiembre de 2014

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Tabla de contenidos
ndice de figuras .................................................................................................................................. 3
ndice de tablas ................................................................................................................................... 3
ndice de cdigos ................................................................................................................................. 4
Introduccin ........................................................................................................................................ 5
Pruebas unitarias................................................................................................................................. 6
Qu son las pruebas unitarias? .................................................................................................... 6
PHPUnit-PHP ................................................................................................................................... 7
Qu es PHP? Para qu sirve PHP? .......................................................................................... 7
Las primeras versiones de PHP .................................................................................................. 8
Caractersticas de PHP ................................................................................................................ 8
Qu es PHPUnit? ....................................................................................................................... 9
Patrones para realizar assert con PHPUnit .............................................................................. 10
QUnit Javascript ......................................................................................................................... 13
Qu es Javascript? .................................................................................................................. 13
Cmo nace Javascript?............................................................................................................ 14
Qu es Qunit? ......................................................................................................................... 16
Cmo nace Qunit? .................................................................................................................. 17
Caractersticas o atributos de QUnit ........................................................................................ 17
Conclusiones ..................................................................................................................................... 23
Bibliografa ........................................................................................................................................ 25
Glosario de trminos ......................................................................................................................... 26
Anexos ............................................................................................................................................... 28
Gua de instalacin y manual de uso de PHPUnit PHP ............................................................. 28
Agregando PHP al PATH ............................................................................................................ 29
Instalacin de PEAR ................................................................................................................... 34
Instalacin de PHPUnit .............................................................................................................. 40
Manual De PHPUnit .................................................................................................................. 44
Gua de instalacin y manual de uso de QUnit - Javascript ........................................................ 51

pg. 2

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

ndice de figuras
Figura 1: Logo PHP............................................................................................................................... 7
Figura 2: Logo PHPUnit........................................................................................................................ 9
Figura 3: Logo JavaScript ................................................................................................................... 13
Figura 4: History of JavaScript ........................................................................................................... 14
Figura 5: Error.................................................................................................................................... 29
Figura 6: Configuracin Avanzada del sistema.................................................................................. 29
Figura 7: Propiedades del sistema .................................................................................................... 30
Figura 8: Variables de entorno .......................................................................................................... 31
Figura 9: Editar la variable del sistema ............................................................................................. 32
Figura 10: Consola ............................................................................................................................. 32
Figura 11: Consola ............................................................................................................................. 33
Figura 12: Ruta PATH......................................................................................................................... 34
Figura 13: Consola ............................................................................................................................. 35
Figura 14: Consola. ............................................................................................................................ 35
Figura 15: Consola ............................................................................................................................. 36
Figura 16: Consola ............................................................................................................................. 37
Figura 17: Consola ............................................................................................................................. 38
Figura 18: Consola ............................................................................................................................. 38
Figura 19: Ventana ............................................................................................................................ 39
Figura 20:Mensaje ............................................................................................................................. 39
Figura 21: Mensaje ............................................................................................................................ 39
Figura 22: Consola ............................................................................................................................. 40
Figura 23: Consola ............................................................................................................................. 40
Figura 24: Consola ............................................................................................................................. 41
Figura 25: Consola ............................................................................................................................. 42
Figura 26: Consola ............................................................................................................................. 42
Figura 27: Consola ............................................................................................................................. 43
Figura 28: Consola ............................................................................................................................. 47
Figura 29: Consola ............................................................................................................................. 49
Figura 30: Consola ............................................................................................................................. 50
Figura 31: QUnit:: A JavaScript Unit Testing framework ................................................................... 51
Figura 32: Guia de Qunit ................................................................................................................... 55
Figura 33: Error.................................................................................................................................. 56

ndice de tablas
Tabla 1: Funcionalidades comunes de pruebas unitarias ................................................................. 46

pg. 3

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

ndice de cdigos
Cdigo 1: Resulting State Assertion .................................................................................................. 10
Cdigo 2: guard assertion ................................................................................................................. 10
Cdigo 3: Delta assertion .................................................................................................................. 11
Cdigo 4:Custom assertion ............................................................................................................... 11
Cdigo 5: Interaction Assertion......................................................................................................... 12
Cdigo 6: Qunit.module .................................................................................................................... 18
Cdigo 7: Test .................................................................................................................................... 19
Cdigo 8: Trows ................................................................................................................................. 19
Cdigo 9: strictEqual ......................................................................................................................... 19
Cdigo 10: ok..................................................................................................................................... 20
Cdigo 11:noStrictEquial ................................................................................................................... 20
Cdigo 12: notEqual .......................................................................................................................... 20
Cdigo 13: notDeepEqual.................................................................................................................. 20
Cdigo 14: equal................................................................................................................................ 21
Cdigo 15: deepEqual ....................................................................................................................... 21
Cdigo 16: propEqual ........................................................................................................................ 21
Cdigo 17: notPropEqual .................................................................................................................. 22
Cdigo 18: PruebaTest.php ............................................................................................................... 43
Cdigo 19: Ejemplo1_PHPUnit .......................................................................................................... 45
Cdigo 20: SalidaEjemplo .................................................................................................................. 47
Cdigo 21: RemoteConnect.php ....................................................................................................... 48
Cdigo 22: RemoteConnectTest........................................................................................................ 48
Cdigo 23: require_once ................................................................................................................... 49
Cdigo 24: FalloPrueba ..................................................................................................................... 50
Cdigo 25: Crear archivo HTML......................................................................................................... 52
Cdigo 26: Funciones ........................................................................................................................ 53
Cdigo 27: Archivos test.................................................................................................................... 54

pg. 4

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Introduccin
El software se crea a travs de una serie de procesos de desarrollo los cuales
representan las tareas fsicas y los requerimientos lgicos del producto. Disear un
software que requiera la participacin simultnea de muchos usuarios trabajando
durante un largo periodo es un proceso complejo que significa una cuidadosa
planificacin y ejecucin para cumplir los objetivos, por lo que es una necesidad el
mantener una gestin del producto de software (Dustin, Rashka, Paul, 2004, p. 6).
El mantenimiento de la calidad del software impide el desarrollo de software de
ritmo rpido as como muchos ciclos de prueba que son necesarios para garantizar
productos de calidad. Existen pruebas unitarias para diferentes entornos, entre ellos se
pueden incluir PHPUnit para PHP y QUnit para Javascript, de los cuales hablaremos en
esta investigacin, se explicar cmo trabajan, algunas caractersticas de estos y sus
funcionalidades.
Las pruebas unitarias pueden ser expresadas como un medio para comprobar el
correcto funcionamiento de una regla de cdigo, estas tiene sus ventajas y beneficios,
sin embargo crear una prueba unitaria no puede considerarse eficiente si no cumple
una serie de requisitos entre los cuales se puede mencionar que deben permitir que la
prueba unitaria sea reutilizable. Las pruebas unitarias no son perfectas y a pesar de ser
muy eficientes, estas no resuelven todo, se darn a conocer algunas de las limitaciones
de estas.

pg. 5

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Pruebas unitarias
Qu son las pruebas unitarias?
En programacin, una prueba unitaria es una forma de comprobar el correcto
funcionamiento de un mdulo de cdigo. Esto sirve para asegurar que cada uno de los mdulos
funcione correctamente por separado.
Las pruebas unitarias son el medio que se emplea para que por medio de un entorno de
prueba se consiga verificar los mdulos de un sistema. Estas pruebas unitarias deben conservar un
formato, el cual debe mantener un estndar de independencia entre cada prueba, adems deben
tratarse como una porcin ms del proyecto y como tal debe conservar su mismo formato y
profesionalidad.
Algunos de los requisitos que tienen las pruebas unitarias son:

Automatizable: No debe solicitar una manipulacin manual, esto quiere decir que debe
funcionar sin la necesidad de que el programador deba digitar algo al tener que realizar la
prueba.

Completas: Se debe envolver la mayor parte del cdigo posible. Significa que entre ms
completa sea la verificacin de los mtodos se puede mantener una mayor certeza sobre la
fiabilidad del producto.

Repetibles o Reutilizables: La reutilizacin de cdigo es un importante punto que es


considerado en el paradigma orientado a objetos, este no debe omitirse en las pruebas, por
lo tanto es necesario que cada prueba no est creada para que solo pueda ejecutarse una
vez, esto es til para la integracin continua.

Independientes: No debe existir una dependencia entre las pruebas, por tanto no se deben
afectar entre ellas durante la ejecucin.

Profesionales: Las pruebas deben ser tratadas como parte del cdigo de la aplicacin, esto
quiere decir que las mismas formalidades deben aplicarse a las pruebas, por ejemplo
colocarle documentacin.
(Canarias, 2012, p.3).

Las pruebas unitarias permiten un mayor alcance que otros tipos de pruebas, facilitan el trabajo en
equipo, reducen el uso de la depuracin, debido a que las pruebas funcionan para comprobar los

pg. 6

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

mtodos no es necesario depender tanto de la depuracin para encontrar el error, son tiles en la
labor de refactorizacin (refactoring). La refactorizacin permite la optimizacin de un cdigo
escrito previamente, favorecen el mejoramiento del diseo y sirven como documentacin.
(Universidad de Sevilla, 2004, p.8).
A continuacin hablaremos de las pruebas unitarias para PHP y Javascript, haciendo primero
una pequea introduccin de estos lenguajes.

PHPUnit-PHP
Qu es PHP? Para qu sirve PHP?
Enrique Gonzlez en su entrega n3 del Tutorial bsico del programador web: PHP desde
cero explica que PHP es un lenguaje de cdigo abierto (significa que es de uso libre y gratuito para
todos los programadores que quieran usarlo), y que puede ser Incrustado en HTML (significa que
en un mismo archivo se puede combinar cdigo PHP con cdigo HTML, siguiendo unas reglas.)
Figura 1: Logo PHP

PHP es utilizado para generar pginas web


dinmicas (pginas cuyo contenido no es
el mismo siempre sino que este puede
cambiar en base a los cambios que haya en
una base de datos, de bsquedas o
aportaciones de los usuarios, etc.). Este
lenguaje

se

procesa

en

servidores

(potentes ordenadores con un software y hardware especial) y cuando se escribe una direccin tipo
http://www.______.com/index.php en un navegador web (por ejemplo Internet Explorer, Firefox,
Chrome, etc) los datos de la solicitud son enviados al servidor que los procesa, este rene los datos
y devuelve una pgina HTML como si fuera esttica.
Con PHP se puede procesar la informacin de formularios, generar pginas con contenidos
dinmicos, o enviar y recibir cookies, entre muchas ms cosas. PHP lo utilizan desde pequeas
pginas web hasta grandes empresas, muchas aplicaciones web estn construidas usando PHP, por
ejemplo se puede citar Joomla y Drupal (gestores de contenido de pginas web), osCommerce y

pg. 7

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Prestashop (tiendas on-line para comercio electrnico), phpBB y SMF (sistemas de foros para
pginas web), Moodle (plataforma educativa para educacin on-line), etc.
PHP tambin puede utilizar y presentar resultados en otros estndares de datos o lenguajes
propios de los desarrollos web, como XHTML y cualquier otro tipo de ficheros XML. PHP puede
autogenerar estos archivos y almacenarlos en el sistema de archivos en lugar de presentarlos en la
pantalla, utilizando estos ficheros para generar contenido dinmico. Es decir, el contenido dinmico
puede surgir de otros sitios adems de desde bases de datos.
Tambin se puede interactuar con otros servidores usando cualquier protocolo. Por ltimo,
PHP puede enlazarse con otros lenguajes muy potentes como Java.
En resumen, PHP es un lenguaje potente, muy usado y de gran inters para los desarrollos
web.

Las primeras versiones de PHP


En 1995 se reconstruy el analizador, se le incorpor un mdulo (realizado por el propio
Rasmus) que interpretaba la informacin de los formularios de html y se le aadi una interfaz para
manejar bases de datos mSQL. Esta versin recibi el nombre de PHP/FI.
En 1997 pas de ser un proyecto individual a ser un proyecto de equipo. Zeev Suraski y Andi
Gutmans reescribieron el analizador y muchas de las funciones de PHP/FI para obtener una nueva
versin.

Caractersticas de PHP
PHP es un lenguaje interpretado (script), pensado fundamentalmente para aadir
funcionalidad a los servidores de pginas web.
Sintctica y gramaticalmente es una mezcla de C, Java y Perl, pero tiene la ventaja de ser un
lenguaje especialmente diseado para la programacin en un entorno web. Incorpora la mayora de
las funciones que un programador web utiliza habitualmente y adems da soporte a las bases de
datos ms utilizadas (en entorno Unix/Linux sobre todo): Oracle, Sybase, mSQL, MySQL, dBase... y
ODBC para acceder a travs de este interfaz a cualquier otro gestor de bases de datos.

pg. 8

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Como ventajas de PHP destacan la facilidad de aprendizaje y utilizacin y, por supuesto, que es un
producto de libre distribucin.
Al ejecutarse desde un navegador web el usuario trabaja en un entorno conocido y no tiene
que aprender nada nuevo para poder utilizar el programa.
Los programas PHP se ejecutan en la mquina del servidor (server side) como bloques
individuales o como scripts intercalados entre cdigo HTML. Al estar guardados en el servidor el
cdigo est protegido de la manipulacin por parte de los usuarios y del ataque de virus.

Qu es PHPUnit?
Segn Carlos Nacianceno, PHPUnit es un
framework open source para el desarrollo, orientado
a pruebas TDD para cualquier cdigo PHP. Es decir,
es un framework que nos ayuda a probar nuestro
cdigo.
Sebastian Bergmann (creador de PHPUnit)
dice todos los programadores cometen errores,
pero la diferencia entre los buenos programadores y
los malos programadores es que los buenos programadores prueban su cdigo Figura 2: Logo PHPUnit
para encontrar esos errores lo ms pronto posible.
La propuesta de PHPUnit y otros frameworks para pruebas es crear pequeas unidades que
revisen funcionalidades puntuales del cdigo y probar que funcionen como debe, adems de la
posibilidad de automatizar estas pruebas para ejecutarlas frecuentemente, tanto como el cdigo
cambie.
La va tpica para instalar PHPUnit es a travs de PEAR, aunque tambin algunos IDEs como
Zend Studio ya lo traen integrado. Una vez instalado hay que crear los tests, (mtodos clases en
PHP), y ejecutarlos por lnea de comando o desde el IDE; as se obtiene un resultado para cada test.
Para que una prueba sea exitosa, todos los tests unitarios deben pasar y obtener un alto porcentaje
en la cobertura de cdigo.

pg. 9

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Crear tests unitarios puede complicarse si nuestro cdigo no es testeable, es decir, no se


presta mucho para hacerle pruebas, saber si un cdigo es testeable o no, crear pruebas ms
efectivas es algo que slo con la prctica se lograr.

Patrones para realizar assert con PHPUnit


Veremos algunos patrones para escribir mejores tests, estos estn representados mediante
pequeos ejemplos utilizando PHPUnit, pero podra ser aplicable a cualquier otro lenguaje, ya que
todo esto solo es un conjunto de buenas prcticas para hacer tests unitarios.
Un estado resultante(Resulting State Assertion)
La idea detrs de un assert es crear un objeto, ejecutar algunas funciones y despus comprobar su
estado interno. Lo mejor es utilizar un ejemplo para ilustrarlo:
public function testSizeOfListItemsAddedToIt()
{
$list = array();
array_push($list,'something');
$this->assertEquals(1, sizeof($list));
}
Cdigo 1: Resulting State Assertion

En este test se puede comprobar que cuando se crea un array y se le aade un elemento su tamao
despus de aadir el elemento es 1.
Validando hiptesis (guard assertion)
Otra opcin a la hora de hacer testing es hacer explcitas las hiptesis antes de invocar al mtodo
que queramos probar.
public function testListIsNoLongerEmptyAfterAddingAnItemToIt()
{
$list = array();
$this->assertTrue(empty($list)); //guard assertion
array_push($list,'something');
$this->assertFalse(empty($list)); //state verification
}
Cdigo 2: guard assertion

Vemos cmo se puede verificar que la lista al ante de ejecutar el mtodo array_push est
vaca y despus de aadirle un elemento ya no lo est. Lo normal es combinar los 2 patrones
anteriores para lo tests, normalmente primero se confirma el estado del objeto antes de ejecutar el
mtodo a probar y despus se valida el resultado obtenido.

pg. 10

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Triangulacin (Delta assertion)


De vez en cuando ocurre que se tiene que trabajar con cdigo del que no se tienen pruebas, se
pueden llamar a funciones que no se han, eso no es un problema, pero al final se est delegando la
responsabilidad de la prueba en otra funcin. Una solucin comn puede ser triangular, es decir
probar la diferencia que hay entre el antes y despus de probar.

public function testSizeOfListReflectsItemsAddedToIt()


{
$list = array();
$sizeBefore = count($list);
array_push($list,'something');
$this->assertEquals($sizeBefore + 1, count($list));
}
Cdigo 3: Delta assertion

Este ejemplo puede parecer algo ridculo pero resume muy bien los fundamentos del patrn de
triangulacin para pruebas unitarias. Es cierto, que estas aserciones pueden llegar a ser complejas
de escribir, pero se centran en la esencia de lo que se est poniendo a prueba.
Custom assertion
A veces se necesita mucho cdigo para poder invocar a la funciones que queremos probar (Mocks,
Stubs,). Cuando esto sucede es una buena idea extraer toda la asercin a un mtodo con el fin de
encapsular toda lgica compleja. As se gana algo de legibilidad en el cdigo e incluso se puede
utilizar nuestra asercin en otros test si fuese necesario.
public function testTimeslotsAreOnWeekdays()
{
$calendar = new MeetingCalendar();
//omitido: aadir citas al calendario hasta
//final de las horas de oficina el prximo viernes
$time = $calendar->nextAvailableStartingTime();
$this->assertIsDuringOfficeHoursOnWeekday($time);
}
protected function assertIsDuringOfficeHoursOnWeekday(DateTime $time)
{
// Asercin: Omitida por brevedad
}
Cdigo 4:Custom assertion

Una razn muy comn para utilizar este tipo de custom assertion es la capacidad de realizar
diferentes tipos de fuzzy matching. Por ejemplo, si necesitamos comparar 2 objetos pero solo por
un subconjunto de propiedades. Adems creando custom assertion podemos hacer que se lancen

pg. 11

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

diferentes mensajes en caso de que el test falle y as sabremos en qu punto est fallando nuestro
test.
Interaccin (Interaction Assertion)
El ltimo patrn para las aserciones es Interaction Assertion. Esta es la asercin ms divertida. Con
este patrn no se comprueban los resultados del cdigo, sino que se verifica que el cdigo interacta
con el resto de objetos como esperamos que lo haga.
public function testPaperBoyShouldDeliverPapers()
{
$david = new MockCustomer();
$ana = new MockCustomer();
$paperboy = new PayperBoy();
$paperboy->addToRoute($david);
$paperboy->addToRoute($ana);
$this->assertTrue(in_array($david, $paperboy->deliever));
$this->assertTrue(in_array($ana, $paperboy->deliever));
}
}
Cdigo 5: Interaction Assertion

Este test es solo un ejemplo y no debemos tenerlo demasiado en consideracin, ya que solo
nos sirve para ilustrar el patrn interaccin. En este ejemplo, se ve como interactan entre s clases
Mock con clases que queremos crear.
En la prctica podemos combinar todos estos patrones assert para poder testear SUT (cdigo bajo
test).

pg. 12

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

QUnit Javascript

Qu es Javascript?
JavaScript (abreviado comnmente JS) es un lenguaje de
programacin interpretado, dialecto del estndar ECMAScript. Se define como
orientado a objetos, basado en prototipos, imperativo, dbilmente tipado y
dinmico.
Se utiliza principalmente en su forma del lado del cliente (client-side),
implementado como parte de un navegador web, el cual interpreta el cdigo
JavaScript integrado en las pginas web. Para interactuar con una pgina web
se provee al lenguaje JavaScript de una implementacin del Document Object
Model (DOM)
(Bitcora del desarrollador, s.f).

Figura 3: Logo JavaScript

Para Jorge Mohedano, Jos Saiz, Pedro Salazar desde el punto de vista tcnico, JavaScript
es un lenguaje interpretado, que significa que las instrucciones son analizadas en secuencia por el
intrprete de JavaScript, () de manera que su ejecucin es inmediata a la interpretacin. Esto
permite que, una vez escrito un programa en JavaScript () y sea embebido el cdigo en un fichero
HTML, el navegador es capaz de interpretarlo y ejecutarlo sin necesidad de procesos intermedios
JavaScript es un lenguaje de programacin que se utiliza principalmente para crear pginas
web capaces de interactuar con el usuario (). Cuando un desarrollador incorpora JavaScript a su
pgina, proporciona al usuario cierta capacidad de interaccin con la pgina web, es decir, cierto
dinamismo y por lo tanto se incrementan las prestaciones de la misma al aadir procesos en
respuesta a las acciones del usuario. Es importante sealar que estos procesos se ejecutan en la
mquina del cliente (navegador) y por tanto no implican intercambio de datos con el servidor (sic)
(Jorge Mohedano, Jos Saiz, Pedro Salazar, 2012)

pg. 13

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Tcnicamente, JavaScript es un lenguaje de programacin interpretado, por lo que no es


necesario compilar los programas para ejecutarlos. En otras palabras, los programas escritos con
JavaScript se pueden probar directamente en cualquier navegador sin necesidad de procesos
intermedios.

Cmo nace Javascript?

Javascript es una tecnologa que ha sobrevivido por ms de 10 aos, es fundamental en la


web, junto con la estandarizacin de la European Computer Manufacturers Association (ECMA)
(adoptada luego por la ISO) y W3C DOM, Javascript es considerado por muchos desarrolladores web
como la fundacin para la prxima generacin de aplicaciones web dinmicas del lado del cliente.
Naci con la necesidad de permitir a los autores de sitio web crear pginas que permiten
intercambiar con los usuarios, ya que se necesitaba crear webs de mayor complejidad. El HTML solo
permita crear pginas estticas donde se poda mostrar textos con estilos, pero se necesitaba
interactuar con los usuarios.
En conjunto con Emmanuel Gutierrez (2009) y Damin Prez (2007) hacemos un repaso por
la historia de JavaScript desde su origen y evolucin:
En los comienzos de Internet, las pginas web estaban compuestas nicamente de texto y
de vnculos hipertexto, limitando as su uso a un mbito cientfico y universitario. Por otro lado, las
limitaciones tcnicas de la poca, sobre todo las relacionadas con la velocidad de conexin, no
permitan proponer algo ms.

Figura 4: History of JavaScript

pg. 14

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

El nacimiento de JavaScript como Livescript

En los aos de 1990, Netscape creo Livescript; las primeras versiones de este lenguaje
fueron principalmente dedicadas a pequeos grupos de diseadores Web que no necesitaban
utilizar un compilador, o sin ninguna experiencia en la programacin orientada a objetos.
Es a mediados de 1990 cuando la necesidad de disponer de pginas web ms amigables y con ms
servicios se hizo ms fuerte. Brendan Eich, por aquel entonces ingeniero informtico de Netscape,
tuvo el encargo de desarrollar un nuevo navegador web. Aprovech la ocasin para desarrollar un
lenguaje de Script, originalmente denominado LiveScript, que deba ser en teora un complemento
de Java (estos dos lenguajes suelen confundirse debido a su denominacin casi idntica a pesar de
no tener casi nada en comn). El objetivo de este lenguaje de programacin era desarrollar pginas
web ms atractivas y amigables para el usuario, sin tener que usar para ello una programacin en
el lado del servidor. Para poder realizar esto, era necesario que el navegador pudiera interpretar el
cdigo JavaScript. Netscape decide entonces implementar de manera nativa LiveScript en la versin
2.0 de su navegador (bautizado entonces Netscape Navigator) a partir del ao 1995
(Emmanuel Gutierrez, 2009).

pg. 15

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Nace JavaScript como JavaScript y Microsoft entra al juego


En diciembre de 1995, Netscape y Sun Microsystems (el creador del lenguaje Java) luego
de unirse al objetivo de desarrollar el proyecto en conjunto, reintroducen este lenguaje con el nombre
de Javascript. En respuesta a la popularidad de Javascript, en el ao de 1996 Microsoft se interesa
por competir (), por lo que lanza su lenguaje llamado Jscript, introducido en los navegadores de
Internet Explorer (y cuya ltima versin actualmente es Jscript.Net). A pesar de las diferentes crticas
que se le hacen al lenguaje Javascript, este es uno de los lenguajes de programacin ms populares
para la web. Desde que los navegadores incluyen el Javascript, no necesitamos el Java Runtime
Environment (JRE), para que se ejecute.
(Prez Valds, 2007)
Su crecimiento y su desprestigio
Las versiones de JavaScript comenzaron a encadenarse proponiendo en cada una de ellas
nuevas mejoras. Todo el mundo pudo constatar cmo Internet fue invadido rpidamente por pginas
compuestas de pequeos scripts que permitan, por ejemplo, mostrar la hora, la fecha, el nombre
del visitante o validar el contenido de los campos de un formulario. Sin embargo, a pesar de ser
JavaScript un lenguaje respetuoso de las instrucciones dadas por el ECMA (European Computer
Manufacturers Association), organismo internacional encargado de la estandarizacin de sistemas
de informacin y de comunicacin, los editores de programas desarrollaron desde el principio
navegadores que interpretaban de manera diferente JavaScript. En consecuencia, algunos scripts
podan ejecutarse de manera correcta en un navegador y paradjicamente generar un error en otro.
Por ello, en parte, a finales de los noventa, otros lenguajes como ASP y PHP se hicieron muy
populares. Pero fue sobre todo el uso abusivo de los pop-up (ventana emergente) la razn del
desinters creciente por JavaScript. Su proliferacin afect negativamente a JavaScript y la
desesperacin de los usuarios termin por desprestigiar sus ventajas entre los desarrolladores web;
llegando a considerarlo incluso como un sublenguaje. Afortunadamente, la llegada de los
bloqueadores de pop-up integrados en los navegadores le permiti a JavaScript recuperar el
prestigio perdido
(Emmanuel Gutierrez, 2009)

Qu es Qunit?

pg. 16

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Qunit es un framework de Javascript para realizar pruebas unitarias. Es altamente usado en


proyectos JQuery, JQuery UI, y JQuery Mobile, siendo capaz tambien de realizar pruebas unitarias a
cualquier codigo en Javascript y una de las cosas ms importantes es que hasta se puede incluir a s
mismo en las pruebas que realiza. Por lo dicho anteriormente se puede concluir que Qunit tiene un
gran alcance y es bastante robusto ademas de que es un framework que trabaja de manera muy
sencilla. Se puede decir que es un tipo de testing de caja blanca ya que se ocupa conocer sobre el
manejo de la herramienta aunque como se mencion anteriormente, es muy sencilla de manipular.

Cmo nace Qunit?

Esta gran herramienta fue diseada y desarrollada por John Resig un programador y
empresario, que fue el creador de la biblioteca JQuery y autor de un libro tecnico sobre JavaScript.
La elaboracin de Qunit se realiz en el mismo momento que el proyecto JQuery, por esto es que
cada desarrollador que utilice JQuery debe usar Qunit para testear el cdigo, ya que ambas se
complementan de manera natural.
Para el ao 2008 QUnit tiene su propia casa, nombre y documentacin del API, por eso, a
partir de aqu otras personas pueden empezar a usar esta herramienta para las pruebas unitarias.
El problema era que en ese momento, QUnit dependa mucho de JQuery, fue hasta despus del ao
2009 que se hicieron algunos cambios en la herramienta, y este ya se poda ejecutar solo.

Caractersticas o atributos de QUnit


Como crear especificaciones
Las especificaciones es lo que va evaluar el cdigo fuente. Estas especificaciones se pueden
formar de 4 partes:
1. Dentro de una especificacin podemos agregar un mdulo, el mdulo se encarga de agrupar
las pruebas que tienen similitudes entre si, o que estan dentro de un mismo contexto. Cabe
recalcar que lacreacinn de modulos es meramente opcional, pero se recomienda utilizar
estos modulos ya que as mantienen ms orden en las pruebas realizadas.
2. A continuacin se procede a crear las pruebas, cada prueba est formada por un bloque de
cdigo, este bloque est conformado por la descripcin de lo que el cdigo debe

pg. 17

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

hacer.Despuss se debe crear las expectativas de resultados que debe dar la prueba. Aqu
se recomienda que cada una de las pruebas evale una sola funcionalidad del cdigo, es
decir, en una prueba no se puede evaluar dos resultados del mismo cdigo.
3. Se escribe el codigo para ver si se cumple la expectativa, una buena prctica es crear
diferentes pruebas a evaluar para una misma seccion de codigo.
4. Por ltimo, se debe repetir los pasos anteriores por cada archivo de cdigo fuente que se
quiera evaluar.

Mdulos
Los mdulos se definen para mantener todas las pruebas organizadas, estos mdulos
tambin se puede ejecutar de forma unitaria.
Para definir mdulos en QUnit se debe usar la funcin module(nombre, [ciclo de vida])
donde nombre es un String y hace referencia al nombre del mdulo y ciclo de vida permite
establecer callbacks (ms adelante se hablar sobre estos elementos) que se ejecutarn antes y
despus de cada prueba que compone el mdulo, esta parte es opcional.
Todas las pruebas que estn despus de la definicin de un mdulo, van a pertenecer a ese modulo.

Cdigo 6: Qunit.module

Pruebas
Una prueba es un bloque de cdigo en donde se define lo que debe hacer un cdigo especfico, se
le asigna un valor esperado y despus se compara ese valor esperado con el resultado de la prueba.

pg. 18

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

En caso de que ambos resultados coincidan, la prueba se considera correcta, si sucede lo contrario
entonces se mostrar un mensaje con el valor esperado y el obtenido para as proceder a corregir
el error.
Una prueba se define de la siguiente manera: test(nombre, prueba), donde nombre es un String
y representa el nombre de la unidad que va ser testeada, y prueba representa la funcin que se
probara.

Cdigo 7: Test

Afirmaciones (asserts)
Las afirmaciones o asserts nos permiten comparar de una forma especfica, los valores esperados
con los resultados obtenidos de un cdigo en particular. A continuacin se presentan las
afirmaciones que se puede aplicar usando QUnit:
trows: Evala si una funcion enva una excepcin cuando se ejecuta.

Cdigo 8: Trows

strictEqual: Compara que el resultado y la expectativa sean idnticos.

Cdigo 9: strictEqual

pg. 19

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

ok: Recibe un valor verdadero (true), es vlida si el primer argumento es verdadero.

Cdigo 10: ok

noStrictEquial: Afirmacin de comparacin que busca que sean diferentes.

Cdigo 11:noStrictEquial

notEqual: Comparacin no estricta donde se busca que el resultado y la expectativa no sean


iguales.

Cdigo 12: notEqual

notDeepEqual: Afirmacin recursiva de comparacin que se busca que no sean idnticos el


resultado y la expectativa.

Cdigo 13: notDeepEqual

equal: Afirmacin donde la comparacin no es estricta, se busca que el resultado y la expectativa


sean iguales.

pg. 20

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Cdigo 14: equal

deepEqual: Afirmacin recursiva de comparacin que se busca que sean idnticos el resultado y la
expectativa.

Cdigo 15: deepEqual

propEqual: Comparacin de valor y tipo estricto de las propiedades de un objeto.

Cdigo 16: propEqual

notPropEqual: Comparacin estricta de la propiedades de un objeto y busca que estos no sean


iguales.

pg. 21

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Cdigo 17: notPropEqual

pg. 22

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Conclusiones
El desarrollo de aplicaciones en los diversos entornos que se exigen en la actualidad
trae consigo un problema que se desarrolla durante la gestin del mismo, este corresponde
a la bsqueda de posibles errores o fallos que puedan ocurrir durante las pruebas e
integracin del software.
Para velar por un producto que sea fiable y que no sea entregado sin demora, se han
creado herramientas de testeo o entornos de prueba los cuales son una ayuda para
encontrar los posibles fallos a los que puede atentar la aplicacin. Estos entornos de prueba
tienen muchos beneficios para quien los utiliza, ya que en proyectos grandes es importante
tener la certeza de que todo funciona como debe. Los entornos de prueba facilitan el
trabajo en equipo y permiten un mayor control sobre gran parte del cdigo ya que por
medio de pruebas unitarias y siguiendo los estndares que cada mtodo debe cumplir, se
puede corroborar que la aplicacin no presenta fallos.
En programacin, una prueba unitaria es una forma de comprobar el correcto
funcionamiento de un mdulo de cdigo. Esto sirve para asegurar que cada uno de los
mdulos funcione correctamente por separado. Las pruebas unitarias deben ser
automatizables, completas, repetibles o reutilizables, independientes y profesionales.
Sin embargo las pruebas unitarias no resuelven todo, estos traen sus limitaciones,
en los que por ejemplo pueden presentar desventajas, como el de verificar todos los
posibles casos de entradas. Adems no siempre se puede depender de que si la aplicacin
no ha mostrado errores funciona bien, esto porque el rendimiento de la aplicacin no es
algo que toma en cuenta.
Existen diferentes entornos de prueba, ya sea PHPUnit para PHP o Qunit para
JavaScript, el uso de estas herramientas facilitan una gestin ms eficiente en el desarrollo.
Y permiten un control del programador sobre su aplicacin.

pg. 23

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Los entornos de prueba siempre que se usen de manera correcta, brindaran un


aporte importante en la creacin de un producto confiable.
Como dice Sebastian Bergmann, el creador de PHPUnit , todos los programadores
cometen errores, pero la diferencia entre los buenos programadores y los malos
programadores es que los buenos programadores prueban su cdigo para encontrar esos
errores lo ms pronto posible.

pg. 24

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Bibliografa
Bitcora del desarrollador. Jherax (s.f). JavaScript. Recuperado
https://jherax.wordpress.com/category/front-end/javascript/

el

20/09/2014

de:

Damin Prez Valds (3 de julio del 2007). Qu es Javascript?. Recuperado el 19/20/2014 de:
http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/
Dextructables Tutoriales y Programacin (s.f). Instalar PHPUnit en Windows. Recuperado el
27/09/2014 de: http://dextructables.com/instalar-phpunit-en-windows/
Emmanuel Gutierrez (2009). JavaScript: Conceptos bsicos y avanzados. Recuperado el 20/09/2014
de: http://books.google.co.cr/books?id=gsxVpvEC4iUC&dq=Javascript&source=gbs_navlinks_s
Enrique Gonzlez (). Qu es PHP? y Para qu sirve? Un potente lenguaje de programacin para
crear
pginas
web.
(CU00803B).
[ONLINE]
Available
at:
http://aprenderaprogramar.com/index.php?option=com_content&view=article &id=492:ique-esphp-y-ipara- que-sirve-un-potente-lenguaje-de-programacion-para-crear-paginas-web-cu00803b&
catid=70:tutorial-basico-programador-web-php-desde-cero&Itemid=193. [Last Accessed Agosto
2014].
Fabien Potencier, Franois Zaninotto (2008). Symfony, la gua definitiva. Recuperado el 28/09/2014
de: http://www.jesusda.com/docs/ebooks/symfony_guia_definitiva.pdf
Jorge Mohedano, Jos Miguel Saiz, Pedro Salazar Romn (2012). Iniciacin a Javascript.
Recuperado el 19/09/2014 de:
http://books.google.co.cr/books?id=iy8bAgAAQBAJ&dq=que+es+Javascript&source=gbs_navlinks_
Miguel ngel Snchez Maza (2012). Javascript, Innovacin Y Cualificacin. Recuperado el
19/09/2014
de:
http://books.google.co.cr/books?id=3x09sewjaHIC&dq=Javascript&source=gbs_navlinks_s
Patrones para mejorar tests con PHP y PHPUnit - TDD. (n.d.). Retrieved September 19, 2014, from
http://jesuslc.com/2014/07/04/patrones-para-mejorar-tests-con-php-y-phpunit-tdd/
PHP desde Cero: Clases & Objetos - CODEHERO. (n.d.). Retrieved September 29, 2014, from
http://codehero.co/php-desde-cero-clases-objetos/
Que es PHP, cmo surgi y para qu se utiliza? (n.d.). Retrieved September 29, 2014, from
http://www.nociondigital.com/webmasters/php-tutorial-que-es-php-como-surgio-y-para-que-seutiliza-detalle-191.html
Qu es PHPUnit? (n.d.). Retrieved September 08, 2014, from http://blog.eltallerweb.com/que-esphpunit/#sthash.nYphcLlt.dpuf

pg. 25

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Glosario de trminos
Interpretado: Un lenguaje interpretado es un lenguaje de programacin que est diseado para ser
ejecutado por medio de un intrprete, en contraste con los lenguajes compilados. (Wikipedia).
ECMAScript: ECMAScript es una especificacin de lenguaje de programacin publicada por ECMA
International. Actualmente est aceptado como el estndar ISO 16262. Comenz a ser desarrollado,
basndose en el lenguaje JavaScript propuesto por Netscape Communications Corporation.
ECMAScript define un lenguaje de tipos dinmicos ligeramente inspirado en Java y otros lenguajes
del estilo de C. Tiene caractersticas de programacin orientada a objetos mediante objetos basado
en prototipos y pseudoclases. (http://www.alegsa.com.ar/Dic/ecmascript.php, Diccionario De
Informtica Y Tecnologa)
Una definicin ms simple es: Es el estndar de lo que la gran mayora de la gente conocemos como
JavaScript. Hablando en sentido estricto, JavaScript y ECMAScript no son exactamente lo mismo.
JavaScript es un dialecto de ECMAScript, pero las diferencias son, en general, irrelevantes y vienen
sobre todo ocasionadas por motivos histricos de compatibilidad con versiones anteriores. (Modo
Estricto de ECMAScript, DesarrolloWEB.com, http://www.desarrolloweb.com/articulos/modoestricto-ecmascript.html)
Document Object Model (DOM): Es un conjunto de utilidades especficamente diseadas para
manipular documentos XML. Por extensin, DOM tambin se puede utilizar para manipular
documentos XHTML y HTML. Tcnicamente, DOM es una API de funciones que se pueden utilizar
para manipular las pginas XHTML de forma rpida y eficiente. (Introduccin a AJAX, Librosweb.es,
http://librosweb.es/ajax/)
HyperText Markup Language (HTML): Es el lenguaje bsico de casi todo el contenido web. La
mayor parte de lo que ves en la pantalla de tu navegador est escrita, fundamendalmente, usando
HTML. Especficamente, HTML es el lenguaje con el que se escribe la estructura y la semntica del
contenido

de

un

documento

web.

(HTML,

Fundacin

Mozilla,

https://developer.mozilla.org/es/docs/Web/HTML)
European Computer Manufacturers Association (ECMA): "Ecma International es una organizacin
internacional basada en membresas de estndares para la comunicacin y la informacin. Adquiri
el nombre Ecma International en 1994, cuando la European Computer Manufacturers Association

pg. 26

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

(ECMA)

cambi

su

nombre

para

expresar

su

alcance

internacional.

(Wikipedia,

http://es.wikipedia.org/wiki/Ecma_International)
Organizacin Internacional de Normalizacin (ISO): Es una federacin de entidades a nivel mundial,
que se dedican a estndares que agrupan ms de 100 pases. Su objetivo primordial es fomentar el
desarrollo mundial de actividades de normalizacin, y as hacer ms fcil el intercambio de bienes y
servicios entre pases. (ISO, Organizacin Internacional de Normalizacin: Historia, Funciones y
Estructura,

ISOTools

Excellence,

http://www.isotools.org/2013/06/20/iso-organizacion-

internacional-de-normalizacion-historia-funciones-y-estructura/#sthash.12oXl6ER.dpuf)
Netscape: Netscape Communications Corporation es una empresa de software famosa por ser la
creadora del navegador web Netscape Navigator. Fue comprada por AOL en 1999. (Wikipedia,
http://es.wikipedia.org/wiki/Netscape_Communications_Corporation)
ASP (Active Server Pages): Es la tecnologa desarrollada por Microsoft para la creacin de pginas
dinmicas del servidor. ASP se escribe en la misma pgina web, utilizando el lenguaje Visual Basic
Script o Jscript (Javascript de Microsoft).

(Qu es ASP , Miguel Angel lvarez,

http://www.desarrolloweb.com/articulos/393.php)
PHP (acrnimo recursivo de PHP: Hypertext Preprocessor): Es un lenguaje de cdigo abierto muy
popular especialmente adecuado para el desarrollo web y que puede ser incrustado en HTML.
(Pgina Oficial De PHP, http://php.net/manual/es/intro-whatis.php)
PATH: Es una variable de entorno de los sistemas operativos POSIX y los sistemas de Microsoft,en
ella se especifican las rutas en las cuales el intrprete de comandos debe buscar los programas a
ejecutar. Las variables de entorno forman un conjunto de valores dinmicos que normalmente
afectan

el

comportamiento

de

los

procesos

en

una

computadora.

(Wikipedia,

http://es.wikipedia.org/wiki/Variable_de_entorno)

pg. 27

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Anexos
Gua de instalacin y manual de uso de PHPUnit PHP
Para este manual se asume que se tiene instalado PHP en el sistema. Si no lo tienen instalado,
pueden instalar Wamp o Xampp, que son paquetes para Windows que instala Apache, PHP y MySQL.
Enlace de Descarga: Xampp Wampp
Existen diferentes formas de instalar Php-Unit, la primera que utilizaremos es mediante PEAR.
Qu es PEAR?
PEAR, o PHP Extension and Application Repository, es un framework y sistema de distribucin
para componentes PHP reutilizables, un entorno de desarrollo y sistema de distribucin para
componentes de cdigo PHP. El proyecto PEAR fue fundado por Stig S. Bakken en 1999 para
promover la reutilizacin de cdigo que realizan tareas comunes.
PEAR permite descargar, instalar, actualizar y desinstalar scripts de PHP. Si se utiliza un paquete de
PEAR, no es necesario decidir donde guardar los scripts, cmo hacer que se puedan utilizar o cmo
extender la lnea de comandos (CLI).
PEAR es un proyecto creado por la comunidad de usuarios de PHP, est desarrollado con PHP y se
incluye en las distribuciones estndar de PHP. (Fabien Potencier, Franois Zaninotto, 2008)
Verificar que PHP se encuentre en el PATH:
Primero tenemos que asegurarnos que PHP se puede ejecutar mediante consola desde cualquier
ubicacin. Para esto abrimos la consola de Windows o Smbolo del sistema y ejecutamos el
comando:
1. php --version

pg. 28

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Si nunca hemos agregado PHP al PATH (variable de entorno de Windows) o ningn programa lo ha
hecho por nosotros, lo ms probable es que nos aparece el siguiente mensaje de error.

Figura 5: Error

Si muestra informacin de PHP entonces ya se encuentra agregado y pueden continuar hasta


Instalacin de PEAR
Agregando PHP al PATH
Primero hay que ir a Equipo (en Windows 7 y versiones posteriores) y dar clic sobre la opcin
Configuracin avanzada del sistema.

Figura 6: Configuracin Avanzada del sistema

pg. 29

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Se abrir una ventana con opciones avanzadas del sistema. Aqu hay que hacer clic al botn
Variables de entorno

Figura 7: Propiedades del sistema

pg. 30

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

En esta nueva ventana, en la lista de la parte de abajo (Variables del sistema), hay que buscar la
opcin que dice PATH y hacer clic en el botn Editar

Figura 8: Variables de entorno

En esta ventana se agrega manualmente la ruta de la carpeta donde se encuentra el ejecutable de


PHP para consola.
Para agregar rutas en el PATH simplemente hay que colocar el cursor al final del cuadro de texto y
agregar el smbolo ; (punto y coma), seguido de la ruta de la carpeta donde se encuentra el
ejecutable. Luego presionamos Aceptar

pg. 31

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos
Figura 9: Editar la variable del sistema

En Wamp, el ejecutable de PHP para consola se encuentra en una ubicacin similar a la que se
aprecia en la imagen. En este caso la carpeta se llama php5.4.16 pero el nombre puede variar
dependiendo de la versin que venga con la instalacin de Wamp (la misma situacin ocurre con
Xampp). Tambin hay que notar que la ruta del ejecutable no incluye el nombre del archivo.
Ya que hayamos agregado la ruta de PHP al PATH aceptamos, y reiniciamos el sistema. No siempre
es necesario pero normalmente el PATH no reconoce la nueva ruta hasta que el sistema haya sido
reiniciado.

Despus de reiniciar comprobamos que funcione correctamente. Para ello abrimos la consola y de
nuevo ejecutamos el comando:
1. php --version

Figura 10: Consola

pg. 32

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Deber desplegar la informacin de la versin de PHP instalada en el sistema.

Figura 11: Consola

Ya que comprobamos que PHP se puede ejecutar desde cualquier ubicacin, procederemos a la
instalacin de PEAR.

pg. 33

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Instalacin de PEAR
El primer paso para la instalacin de PEAR es descargar el siguiente archivo: go-pear.phar y copiarlo
a la carpeta del ejecutable de consola de PHP (la misma ruta que se aadi al PATH).

Figura 12: Ruta PATH

Posteriormente hay que abrir la consola, dirigirnos a la ubicacin (mediante comandos cd ms


espacio en blanco ms nombre de la carpeta a abrir) y ejecutar el siguiente comando:
1. php go-pear.phar
Para evitar errores de permisos administrativos es recomendable ejecutar la consola
como Administrador

pg. 34

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Figura 13: Consola

El instalador nos preguntar si deseamos instalar PEAR de forma local o a nivel de sistema. La
segunda opcin (de forma local) es la que viene por default, as que simplemente presionamos
Enter

Figura 14: Consola.

pg. 35

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

El instalador nos mostrar despus una serie de rutas y nos preguntar si son correctas. En caso de
que alguna no pueda ser determinada tendremos que teclearla manualmente.

Figura 15: Consola

pg. 36

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Presionamos Enter y el instalador proceder a la instalacin de PEAR.

Figura 16: Consola

pg. 37

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Es muy probable que nos aparezca una advertencia como la siguiente, informando que la ruta de
libreras instaladas mediante PEAR no se encuentra en el include_path de PHP. El instalador nos
preguntar si deseamos agregar la ruta al archivo PHP.ini.
Simplemente hay que teclear Y y presionar Enter.

Figura 17: Consola

Una vez que haya finalizado la instalacin se nos avisar que se ha creado un archivo .reg que se
encargar de actualizar el PATH de Windows.

Figura 18: Consola

pg. 38

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Simplemente hay que ejecutar el archivo PEAR_ENV para actualizar las entradas de registro. Es
probable que se nos muestre alguna advertencia pero es normal con este tipo de archivos por el
tipo de informacin que modifican.

Figura 19: Ventana

Presionar S

Figura 20:Mensaje

Figura 21: Mensaje

pg. 39

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Ahora debemos comprobar que efectivamente PEAR sea accesible desde la consola. Para ello
escribimos lo siguiente en la consola:
1. pear versin

Figura 22: Consola

Se debe mostrar algo similar a lo que se aprecia en la imagen, en este caso muestra la versin de
PEAR 1.9.5, esto significa que PEAR se encuentra instalado correctamente.
Ahora procederemos a instalar PHPUnit.

Instalacin de PHPUnit
Hay que abrir la consola y ejecutar lo siguiente para que PEAR identifique de forma automtica las
fuentes de donde obtendr los archivos de PHPUnit.
1. pear config-set auto_discover 1

Figura 23: Consola

pg. 40

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

A continuacin hay que escribir y ejecutar lo siguiente en la consola de comandos para comenzar la
instalacin de PHPUnit.
1. pear install -a pear.phpunit.de/PHPUnit
La opcin -a se asegura de obtener las dependencias necesarias para la instalacin.

Figura 24: Consola

Una vez que finalice la instalacin ejecutamos el siguiente comando:


1. pear clear-cache

pg. 41

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Figura 25: Consola

Este paso es opcional pero es una buena prctica que evita que existan problemas si despus se
instalan otros paquetes mediante PEAR
Al igual que con PHP y PEAR, vamos a comprobar que PHPUnit se ejecute correctamente. Para ello
vamos a desplegar en consola la versin instalada mediante el siguiente comando:

Figura 26: Consola

Listo; hemos terminado de instalar PHPUnit en Windows.


Hasta aqu todo parece estar correcto pero podemos hacer una pequea prueba con un script de
PHP.

pg. 42

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

El desarrollo guiado por pruebas es un tema muy extenso, el cul queda fuera del objetivo del
tutorial, por lo que creamos un ejemplo muy sencillo. En el editor de nuestra preferencia vamos a
crear un archivo llamado PruebaTest.php y lo guardamos donde deseemos. El archivo deber
contener el siguiente cdigo:
1.
2.
3.
4.
5.
6.
7.
8.
9.

<?php
class PruebaTest extends PHPUnit_Framework_TestCase
{
public function testPrueba()
{
$this->assertTrue(true);
}
}
?>
Cdigo 18: PruebaTest.php

En la consola de Windows navegamos hacia la ubicacin del archivo y escribimos el siguiente


comando para ejecutar las pruebas que se encuentran en la clase PruebaTest; en este caso slo
hemos definido una prueba: Test.php.
PHPUnit revisa la clase y ejecuta cada mtodo que empiece con la palabra test. La consola deber
mostrarnos un mensaje como el siguiente, indicando que la prueba se ha ejecutado correctamente.

Figura 27: Consola

pg. 43

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Manual De PHPUnit

Con PHPUnit, lo ms bsico que escribiremos es un caso de prueba. Pero primero existen algunas
reglas que necesitamos considerar a la hora de escribir los casos de prueba, esto a fin de que
trabajen con PHPUnit:

Frecuentemente, querremos que nuestra clase de prueba extienda la clase


PHPUnit_Framework_TestCase. Esto nos dar acceso a ciertas funcionalidades como los
mtodos para las pruebas setUp() y tearDown().
El nombre de la clase de prueba debe imitar el nombre de la clase que se est probando. Por
ejemplo, en el primer ejemplo para probar RemoteConnect, utilizaremos
RemoteConnectTest, para el segundo.
Al crear mtodos de prueba, es necesario que empiecen con la palabra test, como
testDoesLikeWaffles(). Los mtodos deben ser pblicos. Podemos tener mtodos privados en
las pruebas, pero no se podrn ejecutar como pruebas por PHPUnit.
Los mtodos de prueba no recibirn ningn parmetro. Cuando escribamos las pruebas, es
necesario que sean lo ms autnomas posibles, tratando de que ellas mismas se necesiten.
Esto puede ser frustrante a veces, pero nos proporcionar unas pruebas ms limpias y
eficaces.(BALUART.NET, 2011)

Ejemplo #1

En el primer ejemplo vamos a crear solo una clase prueba que contenga los mtodos a probar (sin
el uso de otra clase). El nombre del archivo es ArrayTest.php y en el caso nuestro lo guardamos
en la direccin del wampp: C:\wam_x86\www\PHP-Unit\ArrayTest.php
El proyecto tiene dos mtodos:

testNewArrayIsEmpty: Verifica que la matriz arrayTest sea vaca, es decir; que el tamao
sea 0.
testArrayContainsAnElement: Verifica que el tamao de la matriz sea igual a 1.

pg. 44

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Cdigo 19: Ejemplo1_PHPUnit

Podrn percibir que la clase principal ArrayTest extiende la clase TestCase de PHPUnit, por lo que
una gran cantidad de funcionalidades se aaden con ella. Si notas, en el cdigo hay un assertEquals,
esa es una de las funciones de ayuda de PHPUnit.

pg. 45

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

A continuacin una lista de algunas de las funcionalidades ms comunes que podemos utilizar en
nuestras pruebas:
AssertTrue/AssertFalse

Comprueba la entrada para verificar si es igual a true/false

AssertEquals

Comprueba el resultado frente a otra entrada en busca de


coincidencias

AssertGreaterThan

Comprueba el resultado para ver si es mayor que un valor


(tambin
hay
LessThan,
GreaterThanOrEqual,
y
LessThanOrEqual)

AssertContains

Comprueba que la entrada contiene un valor especfico

AssertType

Comprueba que una variable es de un cierto tipo

AssertNull

Comprueba que una variable es nula

AssertFileExists

Comprueba que un archivo existe

AssertRegExp

Comprueba la entrada con una expresin regular


Tabla 1: Funcionalidades comunes de pruebas unitarias

Continuando con el ejemplo, ejecutar las pruebas es tan sencillo como llamar al ejecutable phpunit
y sealar las pruebas. Aqu tenemos el ejemplo de cmo llamar a nuestra prueba:
Primero en la consola de comandos nos ubicamos dentro de la carpeta donde se encuentra nuestro
cdigo de prueba, y ejecutamos el siguiente cdigo
phpunit ArrayTest.php

pg. 46

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Figura 28: Consola

Por cada una de las pruebas del caso de prueba, PHPUnit se ejecuta a travs de ellos y recoge
algunas estadsticas como el nmero de pruebas y aserciones. He aqu una vista de la salida de
nuestro ejemplo:
PHPUnit 4.0.17 by Sebastian Bergmann
.
Time: 111 ms, Memory: 3.75MB
OK(2 test, 2 assertions)
Cdigo 20: SalidaEjemplo

Para cada prueba que ejecutamos, veremos un punto (.) si se tiene xito (como arriba), una F o
una E si ocurri un error, y una I si la prueba est marcada como incompleta o una S si se ha
marcado como Omitida (Skipped).

pg. 47

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Ejemplo #2

En el segundo ejemplo, recurriremos al cdigo encontrado en baluart.net (2011), utilizando dos


clases, la clase principal que tiene las funcionalidades del programa (el cual simplemente intentara
crear una conexin con la direccin web que le proporcionaremos desde el cdigo de prueba).
La primera la llamaremos RemoteConnect.php

Cdigo 21: RemoteConnect.php

Y la segunda clase que es la que contendr la prueba unitaria y ser la que ejecutemos con el phpunit
se llamara RemoteConnectTest.php

Cdigo 22: RemoteConnectTest

pg. 48

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

En este caso utilizaremos el assertTrue que lo nico que hace es comprobar que una expresin
booleana es true, es decir en nuestra prueba verifica que la conexin con el servidor sea diferente
de falso, es decir; verdadero, la prueba tendr xito si el programa consigue establecer la conexin,
en este caso con www.google.com.
Ejecutamos la prueba de la misma manera que la anterior.
phpunit RemoteConnectTest.php

Figura 29: Consola

Y el resultado nos muestra que la prueba fue exitosa. Ahora para variar probemos con la conexin
a una direccin web que no existe, para que el resultado de la prueba sea fallido.

Cdigo 23: require_once

Modificamos el archivo RemoteConnectTest.php y la variable $serverName la cambiamos por una


direccin no exista o no pueda conectarse. Y volvemos a ejecutar la prueba desde la consola de
comandos.

pg. 49

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Figura 30: Consola

El resultado nos muestra que la prueba ha fallado.


PHPUnit 4.0.17 by Sebastian Bergmann
E
Time: 118 ms, Memory: 3.75MB
There was 1 error:
...
FAILURES!
Test: 1, Assertions:0, Errors: 1.)
Cdigo 24: FalloPrueba

pg. 50

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Gua de instalacin y manual de uso de QUnit - Javascript


Qunit tiene la caracterstica de que no es una herramienta que ocupe instalarse en la computadora,
ms bien hay que descargar un par de archivos desde la pgina oficial y estos archivos hay que
llamarlos desde la pgina html que se desea probar, esto es una de las partes sencillas de Qunit.

1. Descargar los archivos qunit.css y qunit.js

Para esto, hay que ir a la pgina oficial http://qunitjs.com/ y se descargar estos dos archivos. Estos
dos archivos son la interfaz de los resultados del test.

Figura 31: QUnit:: A JavaScript Unit Testing framework

pg. 51

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

2.
Crear el archivo HTML
Este va ser el archivo que vamos a ejecutar para ver los resultados del test. Este archivo HTML debe
contener la referencia a los dos archivos descargados en el paso 1.

Cdigo 25: Crear archivo HTML

Lnea 6: referencia a el archivo descargado qunit.css descargado en el paso 1.


Lnea 10 y 11: Estas dos lneas se ocupan para desplegar el resultado de las pruebas que se
llevarn a cabo.
Lnea 12: Hace referencia a el archivo qunit.js descargado en el paso 1.
Lnea 15: Referencia al archivo javaScript que posee el programa o funciones del programa.
Lnea 18: Referencia a el archivo javaScript que posee los test que se desean probrar.
Esto es lo nico que ocupa el archivo HTML para poder ejecutar un test.

3.
Archivo de funciones (funciones.js)
Para mantener el orden, se procede a realizar un archivo.js del programa que contiene las funciones.
Y se llama (hace referencia) como se hizo en el paso anterior. En nuestro caso, el archivo de
funciones .js va ser las 4 funciones bsicas de una calculadora.

pg. 52

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Cdigo 26: Funciones

4.
Archivo de pruebas (test.js)
Este archivo tambin es recomendable crearlo aparte de los otros cdigos y despus hace referencia
a el en el archivo HTML que se debe ejecutar, como en el ejemplo del paso 2.
En nuestro caso, se crea dos mdulos de pruebas, uno es para probar cuando uno de los nmeros
de la operacin est indefinido y el otro mdulo prueba con ambos nmeros definidos.

pg. 53

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Cdigo 27: Archivos test

5.
Ejecutar el archivo HTML
Una vez hecho los pasos anteriores, ejecutamos nuestro archivo HTML para ver los resultados de la
prueba, el archivo puede ser ejecutado en cualquier navegador.

pg. 54

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Figura 32: Guia de Qunit

De esta manera es que se observan los test realizados. Aqu hay varias opciones para ver los
resultados como ms se desee.

Hide passed tests: Aqui se puede esconder los test pasados satisfactoriamente.
Check for Globals: Crea una lista de los elementos que tiene el objeto Window antes y
despus del test, para despus hacer una comparacin.
No try-catch: Ejecuta la prueba fuera de un try-catch para encontrar excepciones de cada
navegador en que es ejecutado.

Debajo de estas opciones, se muestra la cantidad de afirmaciones pasadas y fallidas.


En la esquina superior derecha se puede escoger la visualizacin de las pruebas, clasificadas por
mdulos.
Despus ya se muestran todos los resultados clasificados por mdulo y sus funciones, al elegir una
de estas, se muestra el mensaje de cada prueba.
En el ejemplo se puede ver que cada una de las funciones probadas, fueron pasadas
satisfactoriamente. Caso contrario la respuesta sera similar a la siguiente:

pg. 55

Pruebas unitarias (PHPUnit PHP y QUnit Javascript)


Araya Gmez Jeimy Pamela, Pacheco Corella Uriel Isaac & Salas Aguilar Jean Carlos

Figura 33: Error

Para este caso, la funcin suma fall porque en el test se puso que el nmero 5 era el que se
esperaba al sumar 2+4 por tanto no es correcto, y el resultado correcto era 6. El informe tambin
ensea la ubicacin del archivo que tiene la falla.

pg. 56

También podría gustarte