You are on page 1of 94

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E

Prcticas del curso Prueba de Software Prctica 1 Pgina 1



Introduccin a JUnit
Objetivo: el objetivo de esta prctica es que el participante cree una clase J ava con
un conjunto de mtodos y genere y ejecute un caso de prueba (TestCase) para
probar los mtodos de dicha clase usando J Unit desde el IDE Netbeans.

La clase que se va a construir es una calculadora sencilla, en un principio con las
cuatro operaciones bsicas: suma, resta, multiplicacin y divisin usando dos
argumentos.

Pasos a seguir:

1. Crear la clase Calculadora con las funcionalidades de suma, resta,
multiplicacin y divisin usando slo dos argumentos.

a. Abrir Netbeans


Prct ica
1
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 1 Pgina 2

b. Crear un nuevo proyecto de tipo Java Application. Para esto se debe
seleccionar en el men Fi l e | New Pr oj ect .

- En la ventana emergente New Project se debe seleccionar la
categora Java y dentro de esta categora seleccionar el tipo de
proyecto Java Application.

- Pulsar el botn Next>.

- En la ventana emergente New Java Application colocar en el
campo Project Name el valor Calculadora y asegurarse de que
estn seleccionadas las dos opciones de la ventana.

- Pulsar el botn Finish. Entonces aparecer el proyecto
Calculadora con sus carpetas asociadas, el cual puede verse en
la ventana Projects

c. Crear la clase Cal cul at or .
- En el proyecto calculadora, en la carpeta Source Packages
seleccionar el paquete calculadora.
- Con el botn derecho del ratn y seleccionar: New | J ava
Cl ass.




- En la ventana emergente New Java Class, escribir Cal cul at or en
el campo Class Name el valor y pulsar el botn Finish.
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 1 Pgina 3




- En la ventana emergente New Java Class, escribir Cal cul at or en
el campo Class Name el valor y pulsar el botn Finish.

- Entonces se abrir la pestaa correspondiente al esqueleto de
cdigo de la clase Cal cul at or .

d. Escribir los mtodos de la clase Cal cul at or .

- En la pestaa del cdigo de la clase Cal cul at or colocar entre los
parntesis delimitadores del cdigo de la clase los mtodos de la
calculadora. Una vez escritos el cdigo de la clase Cal cul at or
debe verse de la siguiente forma:

publ i c cl ass Cal cul at or {
publ i c doubl e add( doubl e number 1, doubl e number 2) {
r et ur n number 1 + number 2;
}
publ i c doubl e subt r act ( doubl e number 1, doubl e number 2) {
r et ur n number 1 - number 2;
}
publ i c doubl e mul t i pl y( doubl e number 1, doubl e number 2) {
r et ur n number 1 * number 2;
}
publ i c doubl e di vi de( doubl e number 1, doubl e number 2) {
r et ur n number 1 / number 2;
}
}

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 1 Pgina 4


- Pulsar <Crtl+S>para salvar el trabajo realizado hasta ahora.

- Construir el proyecto para verificar que no tiene errores
seleccionando en el men: Bui l d | Bui l d Mai n Pr oj ect .

- En la ventana Output se podr ver el resultado de la accin Build, la
cual debera ser exitosa. De lo contrario se debe revisar el cdigo
en busca de los errores indicados en la ventana Output, corregirlos
y volver a construir el proyecto.


2. Crear un caso de prueba usando JUnit para la clase Calculator que
pruebe cada uno de sus mtodos

a. En la ventana Projects se selecciona la clase para la que se quiere
construir el caso de prueba, que en este caso es la clase
Cal cul at or . j ava.

- En la barra de man: Tool s | Cr eat e J Uni t Test .

- Aparece una ventana emergente para seleccionar la versin de
J Unit que se va a usar para crear el caso de prueba. Seleccionar la
opcin J Unit 3.x y pulsar el botn Select.

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 1 Pgina 5
- Aparece la ventana emergente Create Tests donde se define los
parmetros para generar el esqueleto del caso de pPrueba. Por
ahora se van a desmarcar las opciones Test Initializer y Test
Finalizer. Luego se debe pulsar el botn OK.




b. Entonces aparecer la ventana asociada al esqueleto de cdigo del caso
de prueba generado, que es una subclase de la clase Test Case del
framework J Unit y que tiene cuatro mtodos de prueba, t est Add( ) ,
t est Subt r act ( ) , t est Mul t i pl y( ) y t est Di vi de( ) , para probar
cada uno de los mtodos de la clase Cal cul at or usando el mtodo
asser t Equal s( ) .

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 1 Pgina 6


c. Entonces aparecer la ventana asociada al esqueleto de cdigo del caso
de prueba generado, que es una subclase de la clase Test Case del
framework J Unit y que tiene cuatro mtodos de prueba, t est Add( ) ,
t est Subt r act ( ) , t est Mul t i pl y( ) y t est Di vi de( ) , para probar
cada uno de los mtodos de la clase Cal cul at or usando el mtodo
asser t Equal s( ) .

- Para que cada uno de los mtodos de prueba compile
correctamente, se debe borrar de cada uno las dos ltimas lneas
de cdigo, es decir, se debe borrar de cada mtodo de prueba el
siguiente cdigo:

/ / TODO r evi ew t he gener at ed t est code and r emove t he
def aul t cal l t o f ai l .
f ai l ( " The t est case i s a pr ot ot ype. " ) ;

- Pulsar <Crtl+S>para salvar el trabajo realizado hasta ahora.

- Se compila la clase de prueba generada seleccionando en el
men Bui l d | Compi l e Cal cul at or Test . j ava.

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 1 Pgina 7
- En la ventana Output se ve el resultado de la compilacin, el cual
debera ser exitoso. De no serlo se revisan los errores indicados,
se arreglan y se vuelve a compilar la clase hasta que compile
exitosamente.

- El cdigo del caso de prueba Cal cul at or Test debera ser el
siguiente:


package cal cul ador a;

i mpor t j uni t . f r amewor k. Test Case;

/ **
*
* @aut hor Admi ni st r ador
*/
publ i c cl ass Cal cul at or Test ext ends Test Case {

publ i c Cal cul at or Test ( St r i ng t est Name) {
super ( t est Name) ;
}

/ **
* Test of add met hod, of cl ass Cal cul at or .
*/
publ i c voi d t est Add( ) {
Syst em. out . pr i nt l n( " add" ) ;
doubl e number 1 = 0. 0;
doubl e number 2 = 0. 0;
Cal cul at or i nst ance = new Cal cul at or ( ) ;
doubl e expResul t = 0. 0;
doubl e r esul t = i nst ance. add( number 1, number 2) ;
asser t Equal s( expResul t , r esul t ) ;
}

/ **
* Test of subt r act met hod, of cl ass Cal cul at or .
*/
publ i c voi d t est Subt r act ( ) {
Syst em. out . pr i nt l n( " subt r act " ) ;
doubl e number 1 = 0. 0;
doubl e number 2 = 0. 0;
Cal cul at or i nst ance = new Cal cul at or ( ) ;
doubl e expResul t = 0. 0;
doubl e r esul t = i nst ance. subt r act ( number 1, number 2) ;
asser t Equal s( expResul t , r esul t ) ;
}

/ **
* Test of mul t i pl y met hod, of cl ass Cal cul at or .
*/
publ i c voi d t est Mul t i pl y( ) {
Syst em. out . pr i nt l n( " mul t i pl y" ) ;
doubl e number 1 = 0. 0;
doubl e number 2 = 0. 0;
Cal cul at or i nst ance = new Cal cul at or ( ) ;
doubl e expResul t = 0. 0;
doubl e r esul t = i nst ance. mul t i pl y( number 1, number 2) ;
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 1 Pgina 8
asser t Equal s( expResul t , r esul t ) ;
}

/ **
* Test of di vi de met hod, of cl ass Cal cul at or .
*/
publ i c voi d t est Di vi de( ) {
Syst em. out . pr i nt l n( " di vi de" ) ;
doubl e number 1 = 0. 0;
doubl e number 2 = 0. 0;
Cal cul at or i nst ance = new Cal cul at or ( ) ;
doubl e expResul t = 0. 0;
doubl e r esul t = i nst ance. di vi de( number 1, number 2) ;
asser t Equal s( expResul t , r esul t ) ;
}

}

3. Ejecutar el Caso de Prueba para comprobar las funcionalidades de la clase
Calculadora.

a. Para ejecutar el caso de prueba primero se deben escribir los valores de
los parmetros de cada uno de los mtodos de prueba, es decir, definir
cuales son los valores de los argumentos que se van a probar en cada
una de las operaciones de la calculadora y cual es el valor del resultado
esperado. Esto se puede hacer directamente en el cdigo de cada mtodo
de prueba colocando los valores a operar en los parmetros number 1 y
number 2 y el valor esperado de la operacin a probar con esos
argumentos en la variable expResul t . Se guarda el trabajo con <Ctrl+S>.

b. Se ejecuta el caso de prueba desde el men seleccionando:
Run | Test Cal cual dor a.

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 1 Pgina 9

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 2 Pgina 1

Creacin de un caso de prueba usando los mtodos setUp() y
tearDown() de la clase TestCase de JUnit

Objetivo: crear una clase J ava y definir y ejecutar un caso de prueba para las
funcionalidades de dicha clase usando los mtodos setUp() y tearDown() de la
clase Test Case de J Unit desde Netbeans.

La clase que se va a construir es una clase para representar y operar nmeros
complejos. Un nmero complejo es un par ordenado de nmeros reales (a, b), en
donde a se conoce como parte real y b como parte imaginaria del nmero complejo.
Los nmeros complejos tienen las siguientes operaciones:
Suma: ( ) ( ) i d b c a d c b a ) ( ) ( , , + + + = +
Multiplicacin: ( ) ( ) i cb ad bd ac d c b a ) ( ) ( , , + + =
Igualdad: ( ) ( ) d b c a d c b a = = = = , ,

La clase para representar los nmeros complejos y sus operaciones se muestra a
continuacin:





Prct ica
2
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 2 Pgina 2

1. Crear la clase ComplexNumber con sus atributos y las funcionalidades:
- Obtener la parte real del nmero complejo, getReal()
- Obtener la parte imaginaria del nmero complejo, getImaginary()
- Sumar nmeros complejos, add()
- Multiplicar nmeros complejos, multiply()
- Verificar igualdad de nmeros complejos, equals()

a. Abrir Netbeans.

b. Crear un nuevo proyecto de tipo Java Application. Para esto se debe
seleccionar en el men: Fi l e | New Pr oj ect

- En la ventana Emergente New Project se debe seleccionar la
categora J ava y dentro de esta categora seleccionar el tipo de
proyecto J ava Application. Pulsar el botn Next>.

- En la ventana emergente New Java Application colocar en el
campo Project Name el valor ComplexNumber y asegurar que
estn seleccionadas las dos opciones de la ventana. Pulsar el
botn Finish.

- Entonces aparecer el proyecto ComplexNumber con sus
carpetas asociadas, el cual puede verse en la ventana Projects.

c. Crear la clase Compl exNumber

- En el Proyecto ComplexNumber, en la carpeta Source Packages
seleccionar el paquete complexnumber.

- Pulsar el botn derecho del ratn y seleccionar: New | J ava
Cl ass. . .

- En la ventana emergente New Java Class, colocar en el campo
Class Name el valor Compl exNumber y pulsar Finish.

- Entonces se abrir la pestaa correspondiente al esqueleto de
cdigo de la clase Compl exNumber , como se muestra a
continuacin:


P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 2 Pgina 3
d. Escribir los mtodos de la clase Compl exNumber

- En la pestaa del cdigo de la clase Compl exNumber escribir
entre los parntesis delimitadores del cdigo de la clase los
atributos y los mtodos de la Compl exNumber . Una vez escritos
el cdigo de la clase debe verse de la siguiente forma:

package compl exnumber ;

publ i c cl ass Compl exNumber {
pr i vat e doubl e Real ;
pr i vat e doubl e I magi nar y;

publ i c Compl exNumber ( doubl e r e, doubl e i mag) {
Real = r e;
I magi nar y = i mag;
}

publ i c doubl e get Real ( ) {
r et ur n Real ;
}

publ i c doubl e get I magi nar y( ) {
r et ur n I magi nar y;
}

publ i c Compl exNumber add( Compl exNumber c) {
r et ur n new Compl exNumber ( get Real ( ) + c. get Real ( ) ,
get I magi nar y( ) + c. get I magi nar y( ) ) ;
}

publ i c Compl exNumber mul t i pl y( Compl exNumber c) {
doubl e r e = get Real ( ) *c. get Real ( ) - get I magi nar y( ) *c. get I magi nar y( ) ;
doubl e i mag = get I magi nar y( ) *c. get Real ( ) +
get Real ( ) *c. get I magi nar y( ) ;
r et ur n new Compl exNumber ( r e, i mag) ;
}

@Over r i de
publ i c bool ean equal s( Obj ect anObj ect ) {
i f ( anObj ect i nst anceof Compl exNumber ) {
Compl exNumber c = ( Compl exNumber ) anObj ect ;
r et ur n ( ( c. get Real ( ) == get Real ( ) ) && ( c. get I magi nar y( ) ==
get I magi nar y( ) ) ) ;
} el se
r et ur n f al se;
}
}

- Pulsar <Ctrl+S> para salvar el trabajo realizado hasta ahora.

- Construir el proyecto para verificar que no tiene errores. Esto se
hace seleccionando en el men:
Bui l d | Bui l d Mai n Pr oj ect

- En la ventana Output se podr ver el resultado de la accin Build,
la cual debera ser exitosa. De lo contrario se debe revisar el
cdigo en busca de los errores indicados en la ventana Output,
corregirlos y volver a construir el proyecto.

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 2 Pgina 4
2. Crear un caso de prueba usando JUnit para la clase ComplexNumber que
pruebe cada uno de sus mtodos, usando el mtodo setUp() para crear
los objetos y estructuras de datos necesarias para establecer el contexto
de los mtodos del caso de prueba y el mtodo tearDown() para liberar los
recursos reservados para realizar la ejecucin del caso de prueba.

Para esto hay que realizar los siguientes pasos:

a. En la ventana Projects se selecciona la clase para la que se quiere
construir el caso de prueba, que en este caso es la clase
Compl exNumber . j ava.

- En la barra de men seleccionar: Tool s | Cr eat e J Uni t
Test s.

- Aparece una ventana emergente para seleccionar la versin de
J Unit que se va a usar para crear el caso de prueba. Seleccionar
la opcin JUnit 3.x y pulsar el botn Select.

- Aparece la ventana emergente Create Tests donde se define los
parmetros para generar el esqueleto del caso de prueba.
Verificar que estn marcadas todas las opciones pulsar el botn
OK.

b. Entonces aparecer la ventana asociada al esqueleto de cdigo del caso
de prueba generado, que es una subclase de la clase Test Case de J Unit
y que tiene el esqueleto de cdigo para los mtodos set Up( ) y
t ear Down( ) heredados de la clase Test Case de J Unit, y el esqueleto de
cdigo para los mtodos de prueba de la clase Compl exNumber :
t est get Real , t est get I magi nar y( ) , t est Add( ) , t est Mul t i pl y( )
y t est Equal s( ) , para probar cada uno de los mtodos de la clase
Compl exNumber usando el mtodo Asser t Equal s( ) .

- Se deben declarar como atributos privados los elementos que se
van a usar en el mtodo set Up( ) y hacer las inicializaciones
correspondientes en el mtodo. En este caso se van a utilizar tres
instancias de nmeros complejos que se declaran como atributos
privados de la clase Compl exNumber Test y que se crearn e
inicializarn en el cuerpo del mtodo set Up( ) . El cdigo
asociado a los atributos privados y al mtodo set Up( ) es el
siguiente:

publ i c cl ass Compl exNumber Test ext ends Test Case {
pr i vat e Compl exNumber cOneZer o;
pr i vat e Compl exNumber cZer oOne;
pr i vat e Compl exNumber cOneOne;

pr ot ect ed voi d set Up( ) t hr ows Except i on {
cOneZer o = new Compl exNumber ( 1, 0) ;
cZer oOne = new Compl exNumber ( 0, 1) ;
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 2 Pgina 5
cOneOne = new Compl exNumber ( 1, 1) ;
}

- En los mtodos de prueba t est Get Real ( ) y
t est Get I magi nar y( ) se elimina la instruccin:

Compl exNumber i nst ance = nul l ;

- En los mtodos de prueba t est Add( ) , t est Mul t i pl y( ) se
eliminan las instrucciones:

Compl exNumber c = nul l ;
Compl exNumber i nst ance = nul l ;
Compl exNumber expResul t = nul l ;

- En el mtodo de prueba t est Equal s( ) se eliminan las
instrucciones:

Obj ect anObj ect = nul l ;
Compl exNumber i nst ance = nul l ;

- Y se sustituyen los nmeros complejos i nst ance, c, expResul t
y anObj ect por los nmeros complejo del conjunto nmeros
complejos creados en el mtodo set Up( ) que se vaya a usar en
cada una de las pruebas.

- Adicionalmente, para que cada uno de los mtodos de prueba
compile correctamente, se debe borrar de cada uno las dos
ltimas lneas de cdigo, es decir, se debe borrar de cada mtodo
de prueba el siguiente cdigo:

/ / TODO r evi ew t he gener at ed t est code and r emove t he
def aul t cal l t o f ai l .
f ai l ( " The t est case i s a pr ot ot ype. " ) ;

- El mtodo t ear Down( ) , que se encarga de liberar los recursos
reservados en el mtodos set Up( ) , colocar en nul l a los
apuntadores de los objetos Compl exNumber creados en el
mtodo set Up( ) . Para esto se sustituir en el esqueleto del
mtodo t ear Down( ) la instruccin

super . t ear Down( ) ;

por las instrucciones:

cOneZer o = nul l ;
cZer oOne = nul l ;
cOneOne = nul l ;

- Pulsar <Ctrl+S>para salvar el trabajo.
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 2 Pgina 6

c. Se compila la clase de prueba generada seleccionando: Bui l d |
Compi l e Compl exNumber Test . j ava.

- En la ventana Output se ve el resultado de la compilacin, el cual
debera ser exitoso. De no serlo, se revisan los errores indicados,
se arreglan y se vuelve a compilar la clase hasta que compile
exitosamente. El cdigo del caso de prueba
Compl exNumber Test debera ser el siguiente:

package compl exnumber ;

i mpor t j uni t . f r amewor k. Test Case;

publ i c cl ass Compl exNumber Test ext ends Test Case {
pr i vat e Compl exNumber cOneZer o;
pr i vat e Compl exNumber cZer oOne;
pr i vat e Compl exNumber cOneOne;

publ i c Compl exNumber Test ( St r i ng t est Name) {
super ( t est Name) ;
}

@Over r i de
pr ot ect ed voi d set Up( ) t hr ows Except i on {
cOneZer o = new Compl exNumber ( 1, 0) ;
cZer oOne = new Compl exNumber ( 0, 1) ;
cOneOne = new Compl exNumber ( 1, 1) ;
}

@Over r i de
pr ot ect ed voi d t ear Down( ) t hr ows Except i on {
cOneZer o = nul l ;
cZer oOne = nul l ;
cOneOne = nul l ;
}

/ **
* Test of get Real met hod, of cl ass Compl exNumber .
*/
publ i c voi d t est Get Real ( ) {
Syst em. out . pr i nt l n( " get Real " ) ;
doubl e expResul t = 0. 0;
doubl e r esul t = cZer oOne. get Real ( ) ;
asser t Equal s( expResul t , r esul t ) ;
}

/ **
* Test of get I magi nar y met hod, of cl ass Compl exNumber .
*/
publ i c voi d t est Get I magi nar y( ) {
Syst em. out . pr i nt l n( " get I magi nar y" ) ;
doubl e expResul t = 0. 0;
doubl e r esul t = cOneZer o. get I magi nar y( ) ;
asser t Equal s( expResul t , r esul t ) ;
}

/ **
* Test of add met hod, of cl ass Compl exNumber .
*/
publ i c voi d t est Add( ) {
Syst em. out . pr i nt l n( " mul t i pl y" ) ;
Compl exNumber r esul t = cZer oOne. add( cOneZer o) ;
asser t Equal s( cOneOne, r esul t ) ;
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 2 Pgina 7
}

/ **
* Test of mul t i pl y met hod, of cl ass Compl exNumber .
*/
publ i c voi d t est Mul t i pl y( ) {
Syst em. out . pr i nt l n( " mul t i pl y" ) ;
Compl exNumber r esul t = cZer oOne. mul t i pl y( cOneZer o) ;
asser t Equal s( cZer oOne, r esul t ) ;
}

/ **
* Test of equal s met hod, of cl ass Compl exNumber .
*/
publ i c voi d t est Equal s( ) {
Syst em. out . pr i nt l n( " equal s" ) ;
bool ean expResul t = f al se;
bool ean r esul t = cZer oOne. equal s( cOneZer o) ;
asser t Equal s( expResul t , r esul t ) ;
}
}


3. Ejecutar el caso de prueba para comprobar la funcionalidad de la clase
ComplexNumber

- Se ejecuta el caso de prueba seleccionando: Run | Test
Compl exNumber .

- En las ventanas TestResult y Output pueden verse los resultados de la
ejecucin del caso de prueba, como se muestra a continuacin





Referencias Bibliogrficas

- Fontoura, M., Pree W., Rumpe B. The UML Profile for Framework Architectures.
Captulo 6. Addison-Wesley. 2002
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 1

Creacin de casos de prueba y suites de pruebas usando JUnit

Objetivo: crear y ejecutar casos y suites de pruebas usando J Unit desde Netbeans,
para probar las funcionalidades de las clases de un carrito de compras usado en las
aplicaciones de comercio electrnico
La funcionalidad del carrito de compras a trabajar es un ejemplo sencillo y va a estar
constituido por dos clases: Pr oduct y Shoppi ngCar t , cuya estructura se muestra
a continuacin:

La clase Pr oduct representa los productos que se pueden comprar aadiendo al
carrito de compras y la clase Shoppi ngCar t representa al carrito de compras
donde se pueden introducir productos a comprar como una lista de tems.
Despus de crear las clases a trabajar en el ambiente Netbeans 6.0 se debe:
- Crear y ejecutar los casos de prueba para las funcionalidades de la clase
Product y de la Clase Shoppi ngCar t , utilizando los mtodos set Up( ) y
t ear Down( ) para evitar la duplicacin de cdigo y poder reusar los fixtures
en cada caso de prueba
- Crear y ejecutar una suite de pruebas que permita ejecutar secuencialmente
las pruebas de todas las funcionalidades de la aplicacin del carrito de
compras

Prct ica
3
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 2

1. Crear un nuevo proyecto de tipo Java Application llamado Shopping

Para esto se debe:

- Seleccionar en el men: Fi l e | New Pr oj ect

- En la ventana Emergente New Project se debe seleccionar la categora J ava
y dentro de esta categora seleccionar el tipo de proyecto J ava
Appl i cat i on. Pulsar el botn Next>

- En la ventana emergente New Java Application escribir en el campo
Pr oj ect Name el valor Shoppi ng y asegurar que estn seleccionadas las
dos opciones de la ventana y pulsar el botn Finish.

- Entonces aparecer el proyecto con sus carpetas asociadas, el cual puede
verse en la ventana Projects, que se muestra a continuacin:



P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 3

2. Crear la clase Product con sus atributos y servicios:

Atributos:
- code: String
- title: String
- description: String
- price: double

Servicios:
- Constructor de productos con la siguiente signatura:
o Product(String code, String title, String description,
double price)
- Obtener el cdigo de un producto, getCode( )
- Obtener el nombre de un producto, getTitle( )
- Obtener la descripcin de un producto, getDescription( )
- Obtener el precio de un producto, getPrice( )

Para esto hay que realizar los siguientes pasos:

b. Crear la clase Product

- En el Proyecto Shopping en la carpeta Source Packages seleccionar
el paquete shopping. Pulsar el botn derecho del ratn y seleccionar
New | J ava Cl ass

- En la ventana emergente New Java Class, escribir en el campo Class
Name el valor Pr oduct y pulsar el botn Finish.

- Entonces se abrir la pestaa correspondiente al esqueleto de cdigo
de la clase Pr oduct .

c. Definir los atributos y mtodos de la clase Product.

- En la pestaa del cdigo de la clase Pr oduct colocar entre los
parntesis delimitadores del cdigo de la clase los atributos y los
mtodos de la clase Pr oduct . Una vez escritos el cdigo de la clase
debe verse de la siguiente forma:

package shoppi ng;

publ i c cl ass Pr oduct {

pr i vat e St r i ng code;
pr i vat e St r i ng t i t l e;
pr i vat e St r i ng descr i pt i on;
pr i vat e doubl e pr i ce;

publ i c Pr oduct ( St r i ng code,
St r i ng t i t l e,
St r i ng descr i pt i on, doubl e pr i ce) {
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 4
t hi s. code = code;
t hi s. t i t l e = t i t l e;
t hi s. descr i pt i on = descr i pt i on;
t hi s. pr i ce = pr i ce;
}

publ i c St r i ng get Code( ) {
r et ur n code;
}

publ i c St r i ng get Ti t l e( ) {
r et ur n t i t l e;
}

publ i c St r i ng get Descr i pt i on( ) {
r et ur n descr i pt i on;
}
publ i c doubl e get Pr i ce( ) {
r et ur n pr i ce;
}
}


- Pulsar <Crtl+S>para salvar el trabajo realizado hasta ahora.

- Construir el proyecto para verificar que no tiene errores. Esto se hace
seleccionando en el men : Bui l d | Bui l d Mai n Pr oj ect

- En la ventana Output se podr ver el resultado de la accin Build, la
cual debera mostrar que se ha compilado exitosamente. De lo
contrario se debe revisar el cdigo en busca de los errores indicados
en la ventana Output, corregirlos y volver a construir el proyecto.

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 5

3. Crear la clase ShoopingCart con sus atributos y servicios:
Atributos:
- items: ArrayList
Servicios:
- Constructor de ShoppingCart donde se crea un ArrayList de
items
- Obtener el monto total de la compra, getBalance()
- Aadir un item de producto al carrito, addItem()
- Quitar un item de producto del carrito, removeItem()
- Obtener la cantidad de tems de productos que hay en el carrito,
getItemCount()
- Vaciar el carrito, empty()

Para ello hay que realizar los siguientes pasos:

a. Crear la clase ShoppingCart.

- En el proyecto shopping en la carpeta Source Packages seleccionar el
paquete shoppi ng. Pulsar el botn derecho del ratn y seleccionar en
el men de contexto: New | J ava Cl ass.

- En la ventana emergente New Java Class, colocar en el campo
Class Name el valor Shoppi ngCar t y pulsar Finish.

- Entonces se abrir la pestaa correspondiente al esqueleto de cdigo
de la clase Shoppi ngCar t

b. Definir los atributos y mtodos de la clase ShoppingCart

- En la pestaa del cdigo de la clase Shoppi ngCar t colocar entre los
parntesis delimitadores del cdigo de la clase los atributos y los
mtodos de la Shoppi ngCar t . Una vez escritos el cdigo de la clase
debe verse de la siguiente forma:

package shoppi ng;
i mpor t j ava. ut i l . *;

publ i c cl ass Shoopi ngCar t {

pr i vat e Ar r ayLi st i t ems;

publ i c Shoppi ngCar t ( ) {
i t ems = new Ar r ayLi st ( ) ;
}

publ i c doubl e get Bal ance( ) {
doubl e bal ance = 0. 00;
f or ( I t er at or i = i t ems. i t er at or ( ) ; i . hasNext ( ) ; ) {
Pr oduct i t em= ( Pr oduct ) i . next ( ) ;
bal ance += i t em. get Pr i ce( ) ;
}
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 6

r et ur n bal ance;
}

publ i c voi d addI t em( Pr oduct i t em) {
i t ems. add( i t em) ;
}

publ i c voi d r emoveI t em( Pr oduct i t em) {
i t ems. r emove( i t em) ;
}

publ i c i nt get I t emCount ( ) {
r et ur n i t ems. si ze( ) ;
}

publ i c voi d empt y( ) {
i t ems. cl ear ( ) ;
}
}

- Pulsar <Crtl+S>para salvar el trabajo realizado hasta ahora

- Construir el proyecto para verificar que no tiene errores. Esto se hace
seleccionando Bui l d | Bui l d Mai n Pr oj ect .

- En la ventana Output se podr ver el resultado de la accin Build, la
cual debera ser exitosa. De lo contrario se debe revisar el cdigo en
busca de los errores indicados en la ventana Output, corregirlos y
volver a construir el proyecto.

4. Crear un caso de prueba usando JUnit para la clase Product que pruebe
cada uno de sus mtodos, usando el mtodo setUp( ) para crear los
objetos y estructuras de datos necesarias para establecer el contexto de
los mtodos del caso de prueba y el mtodo tearDown( ) para liberar los
recursos reservados para realizar la ejecucin del caso de prueba.

Para ello hay que realizar los siguientes pasos:

- En la ventana Pr oj ect s se selecciona la clase para la que se quiere
construir el caso de prueba o TestCase, que en este caso es la clase
Pr oduct .

- En la barra del men seleccionar Tool s | Cr eat e J uni t Test s.
Aparece una ventana emergente para seleccionar la versin de J Unit
que se va a usar para crear el caso de prueba. Seleccionar la opcin
J Unit 3.x y el botn Select.

- Aparece la ventana emergente Create Tests donde se define los
parmetros para generar el esqueleto del caso de prueba. Verificar que
estn marcadas todas las opciones y pulsar el botn OK.

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 7
- Entonces aparecer la ventana asociada al esqueleto de cdigo del
caso de prueba generado, que es una subclase de la clase Test Case
de J Unit y que tiene el esqueleto de cdigo para los mtodos set Up( )
y t ear Down( ) heredados de la clase t est Case del framework J Unit,
y el esqueleto de cdigo para los mtodos de prueba de la clase
Pr oduct , para probar cada uno de los mtodos de la clase usando el
mtodo asser t Equal s( ) .

- Se deben declarar como atributos privados los elementos que se van a
usar en el mtodo set Up( ) y hacer las inicializaciones
correspondientes en el mtodo. En este caso se va a utilizar una
instancia de la clase Pr oduct que se declara como atributo privados
de la clase testProduct y que se crear e inicializar en el cuerpo del
mtodo set Up( ) . El cdigo asociado a los atributos privados y al
mtodo set Up( ) es el siguiente:

publ i c cl ass Pr oduct Test ext ends Test Case {
pr i vat e Pr oduct pr od1;

pr ot ect ed voi d set Up( ) t hr ows Except i on {
pr od1 = new Pr oduct ( " P001" , " Pl asma TV LG 32" ,
" Pl asma TV wi t h TDT Decod. and hi gh r esol ut i on Scr een" ,
699. 99) ;
}

- En los mtodos de prueba se eliminan la instruccin:

Pr oduct i nst ance = nul l ;

Y en el cdigo de cada mtodo de prueba se sustituye i nst ance por
el producto pr od1 creado en el mtodo set Up( ) y se escriben los
valores esperados de acuerdo a los valores de los atributos del
producto pr od1.

- Adicionalmente, para que cada uno de los mtodos de prueba compile
correctamente, se debe borrar de cada uno las dos ltimas lneas de
cdigo, es decir, se debe borrar de cada mtodo de prueba el siguiente
cdigo:

/ / TODO r evi ew t he gener at ed t est code and r emove
t he def aul t cal l t o f ai l .
f ai l ( " The t est case i s a pr ot ot ype. " ) ;

- El mtodo t ear Down( ) , que se encarga de liberar los recursos
reservados en el mtodos set Up( ) , colocar en nul l a los
apuntadores de los objetos creados en el mtodo Set Up( ) . Para esto
se sustituir en el esqueleto del mtodo t ear Down( ) la instruccin:

super . t ear Down( ) ;

por las instrucciones:
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 8

pr od1 = nul l ;

- Grabar el trabajo con <Crtl+S>

- Se compila la clase de prueba con Bui l d | Pr oduct Test . j ava.

- En la ventana Output se ve el resultado de la compilacin, el cual
debera mostrar que se ha compilado exitosamente. De no serlo se
revisan los errores indicados, se arreglan y se vuelve a compilar la
clase hasta que compile exitosamente. El cdigo del caso de prueba
Pr oduct Test debera ser el siguiente:

/ *
* To change t hi s t empl at e, choose Tool s | Templ at es
* and open t he t empl at e i n t he edi t or .
*/

package shoppi ng;

i mpor t j uni t . f r amewor k. Test Case;

/ **
*
* @aut hor Admi ni st r ador
*/
publ i c cl ass Pr oduct Test ext ends Test Case {
pr i vat e Pr oduct pr od1;

publ i c Pr oduct Test ( St r i ng t est Name) {
super ( t est Name) ;
}

@Over r i de
pr ot ect ed voi d set Up( ) t hr ows Except i on {
pr od1 = new Pr oduct ( " P001" , " Pl asma TV LG 32" , " Pl asma TV wi t h
TDT Decod. and hi gh r esol ut i on Scr een" , 699. 99) ;
}

@Over r i de
pr ot ect ed voi d t ear Down( ) t hr ows Except i on {
pr od1 = nul l ;
}

/ **
* Test of get Code met hod, of cl ass Pr oduct .
*/
publ i c voi d t est Get Code( ) {
Syst em. out . pr i nt l n( " get Code" ) ;
St r i ng expResul t = " P001" ;
St r i ng r esul t = pr od1. get Code( ) ;
asser t Equal s( expResul t , r esul t ) ;
}

/ **
* Test of get Ti t l e met hod, of cl ass Pr oduct .
*/
publ i c voi d t est Get Ti t l e( ) {
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 9
Syst em. out . pr i nt l n( " get Ti t l e" ) ;
St r i ng expResul t = " Pl asma TV LG 32" ;
St r i ng r esul t = pr od1. get Ti t l e( ) ;
asser t Equal s( expResul t , r esul t ) ;
}

/ **
* Test of get Descr i pt i on met hod, of cl ass Pr oduct .
*/
publ i c voi d t est Get Descr i pt i on( ) {
Syst em. out . pr i nt l n( " get Descr i pt i on" ) ;
St r i ng expResul t = " Pl asma TV wi t h TDT Decod. and hi gh
r esol ut i on Scr een" ;
St r i ng r esul t = pr od1. get Descr i pt i on( ) ;
asser t Equal s( expResul t , r esul t ) ;
}

/ **
* Test of get Pr i ce met hod, of cl ass Pr oduct .
*/
publ i c voi d t est Get Pr i ce( ) {
Syst em. out . pr i nt l n( " get Pr i ce" ) ;
doubl e expResul t = 699. 99;
doubl e r esul t = pr od1. get Pr i ce( ) ;
asser t Equal s( expResul t , r esul t ) ;
}

}



5. Ejecutar el Caso de Prueba para comprobar las funcionalidades de la clase
Product

- Se ejecuta el caso de prueba seleccionando: Run | Test
Pr oduct . .

- En las ventanas JUnit Test Result y Output pueden verse los
resultados de la ejecucin del caso de prueba, como se muestra a
continuacin



P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 10


6. Crear un caso de prueba usando JUnit para la clase ShoppingCart que
pruebe cada uno de sus mtodos, usando el mtodo setUp() para crear
los objetos y estructuras de datos necesarias para establecer el contexto
de los mtodos del caso de prueba y el mtodo tearDown() para liberar los
recursos reservados para realizar la ejecucin del caso de prueba.

Para esto hay que realizar los siguientes pasos:

a. En la ventana Projects se selecciona la clase para la que se quiere
construir el caso de prueba o TestCase, que en este caso es la clase
ShoppingCart.

- En el men seleccionar: Tool s | Cr eat e J uni t Test s.

- Aparece una ventana emergente para seleccionar la versin de
J unit que se va a usar para crear el caso de prueba. Seleccionar
la opcin J Unit 3.x.

- Aparece la ventana emergente Create Tests donde se define los
parmetros para generar el esqueleto del caso de prueba.
Verificar que estn marcadas todas las opciones. Luego se debe
seleccionar el botn OK.

- Entonces aparecer la ventana asociada al esqueleto de cdigo
del caso de prueba generado, que es una subclase de la clase
Test Case del Framework J Unit y que tiene el esqueleto de
cdigo para los mtodos set Up( ) y t ear Down( ) heredados de
la clase t est Case del framework junit, y el esqueleto de cdigo
para los mtodos de prueba de la clase Pr oduct , para probar
cada uno de los mtodos de la clase usando el mtodo Asser t .

- Se deben declarar como atributos privados los elementos que se
van a usar en el mtodo set Up( ) y hacer las inicializaciones
correspondientes en el mtodo. En este caso se va a utilizar una
instancia de la clase Shoppi ngCar t y una instancia de la clase
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 11
Pr oduct denominadas respectivamente car t 1 y pr od1, que se
declaran como atributo privados de la clase Test Shoppi ngCar t
y que se crearn e inicializarn en el cuerpo del mtodo
set Up( ) . El cdigo asociado a los atributos privados y al mtodo
set Up( ) de la clase Test Shoppi ngCar t es el siguiente:

publ i c cl ass Shoppi ngcar t 1Test ext ends Test Case {

pr i vat e Shoppi ngCar t car t 1;
pr i vat e Pr oduct pr od1;

pr ot ect ed voi d set Up( ) {

car t 1 = new Shoppi ngCar t ( ) ;

pr od1 = new Pr oduct ( " P001" , " Pl asma TV LG 32" , " Pl asma TV
wi t h TDT Decod. and hi gh r esol ut i on Scr een" , 699. 99) ;

car t 1. addI t em( pr od1) ;
}



- En los mtodos de prueba se eliminan las instrucciones:

Shoppi ngCar t i nst ance = new Shoppi ngCar t ( ) ;
Pr oduct i nst ance = nul l ;

Y en el cdigo de cada mtodo de prueba se sustituye el
Shoppi ngCar t i nst ance y Pr oduct i nst ance por
Shoppi ngCar t car t 1 y Pr oduct pr od1 creado en el mtodo
set Up( ) y se colocan los valores esperados de acuerdo a los
valores de los atributos de pr od1.

- Se debe completar el esqueleto del mtodo t est AddI t em
comprobando que el nmero de tems en el carrito sea correcto y
que el valor de la compra se actualice correctamente una vez
aadido un item.

- Se debe completar el esqueleto de cdigo del mtodo
t est Empt y( ) indicando que para hacer la prueba el nmero de
elementos de la lista debe ser igual a 0.

- Adicionalmente, para que cada uno de los mtodos de prueba
compile correctamente, se debe borrar de cada uno las dos
ltimas lneas de cdigo, es decir, se debe borrar de cada mtodo
de prueba el siguiente cdigo:

/ / TODO r evi ew t he gener at ed t est code and r emove t he
def aul t cal l t o f ai l .
f ai l ( " The t est case i s a pr ot ot ype. " ) ;

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 12
- El mtodo t ear Down( ) , que se encarga de liberar los recursos
reservados en el mtodos set Up( ) , colocar en nul l a los
apuntadores de los objetos creados en el mtodo Set Up( ) .
Para esto se sustituir en el esqueleto del mtodo t ear Down( ) la
instruccin:

super . t ear Down( ) ;

por las instrucciones:

car t 1 = nul l ;

pr od1 = nul l ;

- Se pulsa <Crtl+S>para salvar el trabajo

- Se compila la clase de prueba con Bui l d | Compi l e
Pr oduct Test . j ava.

- En la ventana Out put se ve el resultado de la compilacin, el
cual debera ser exitoso. De no serlo se revisan los errores
indicados, se arreglan y se vuelve a compilar la clase hasta que
compile exitosamente.

- El cdigo del caso de prueba Shoppi ngCar t Test debera ser el
siguiente:


package shoppi ng;

i mpor t j uni t . f r amewor k. Test ;
i mpor t j uni t . f r amewor k. Test Case;
i mpor t j uni t . f r amewor k. Test Sui t e;

publ i c cl ass Shoppi ngCar t Test ext ends Test Case {

pr i vat e Shoppi ngCar t car t 1;
pr i vat e Pr oduct pr od1;

publ i c st at i c Test sui t e( ) {
Test Sui t e sui t e = new Test Sui t e( Shoppi ngCar t Test . cl ass) ;
r et ur n sui t e;
}

@Over r i de
pr ot ect ed voi d set Up( ) {

car t 1 = new Shoppi ngCar t ( ) ;

pr od1 = new Pr oduct ( " P001" , " Pl asma TV LG 32" , " Pl asma TV
wi t h TDT Decod. and hi gh r esol ut i on Scr een" , 699. 99) ;

car t 1. addI t em( pr od1) ;
}

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 13
/ **
* Tear s down t he t est f i xt ur e.
*
* Cal l ed af t er ever y t est case met hod.
*/
@Over r i de
pr ot ect ed voi d t ear Down( ) {
car t 1 = nul l ;
pr od1 = nul l ;
}
/ **
* Test of get Bal ance met hod, of cl ass Shoppi ngCar t .
*/
publ i c voi d t est Get Bal ance( ) {
Syst em. out . pr i nt l n( " get Bal ance" ) ;
doubl e expResul t = 699. 99;
doubl e r esul t = car t 1. get Bal ance( ) ;
asser t Equal s( expResul t , r esul t ) ;
}
/ **
* Test of addI t emmet hod, of cl ass Shoppi ngCar t .
*/
publ i c voi d t est AddI t em( ) {
Syst em. out . pr i nt l n( " addI t em" ) ;
Pr oduct pr od2 = new Pr oduct ( " P002" , " DVD pl ayer Sanmsung" ,
" DVD pl ayer wi t h r emot e cont r ol and pr ogr ammi ng f eat ur es" , 39. 99) ;
car t 1. addI t em( pr od2) ;

asser t Equal s( 2, car t 1. get I t emCount ( ) ) ;

doubl e expect edBal ance = pr od1. get Pr i ce( ) + pr od2. get Pr i ce( ) ;

asser t Equal s( expect edBal ance, car t 1. get Bal ance( ) ) ;
}
/ **
* Test of get I t emCount met hod, of cl ass Shoppi ngCar t .
*/
publ i c voi d t est Get I t emCount ( ) {
Syst em. out . pr i nt l n( " get I t emCount " ) ;
i nt expResul t = 1;
i nt r esul t = car t 1. get I t emCount ( ) ;
asser t Equal s( expResul t , r esul t ) ;
}
/ **
* Test of r emoveI t emmet hod, of cl ass Shoppi ngCar t .
*/
publ i c voi d t est RemoveI t em( ) {
Syst em. out . pr i nt l n( " r emoveI t em" ) ;
car t 1. r emoveI t em( pr od1) ;
asser t Equal s( 0, car t 1. get I t emCount ( ) ) ;
}

/ **
* Test of empt y met hod, of cl ass Shoppi ngCar t .
*/
publ i c voi d t est Empt y( ) {
Syst em. out . pr i nt l n( " empt y" ) ;
car t 1. empt y( ) ;
asser t Equal s( 0, car t 1. get I t emCount ( ) ) ;
}
}
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 14

7. Ejecutar el caso de prueba para de la clase ShoppingCart

- Ejecuta el caso de prueba seleccionando Run | Test
Shoppi ngCar t .

- En las ventanas TestResult y Output pueden verse los resultados de la
ejecucin del caso de prueba, como se muestra a continuacin.






8. Crear una suite de pruebas usando JUnit para el paquete shopping que
pruebe todas sus funcionalidades

Para esto hay que realizar los siguientes pasos:

- En la ventana Projects se selecciona el paquete para la que se quiere
construir la suite de pruebas, que en este caso es el paquete Shoppi ng

- En la barra de men seleccionar: Tool s | Cr eat e J uni t Test s.

- Aparece la ventana emergente Create Tests donde se define los
parmetros para generar el esqueleto de la suite de pruebas. Verificar que
estn marcadas todas las opciones y seleccionar OK.

- Entonces aparecer la ventana asociada al esqueleto de cdigo de la suite
de prueba generada para el paquete shoppi ng. Como en el paquete
shoppi ng se encuentra la clase Mai n, cuando se genera la suite de
prueba para el paquete se genera automticamente un caso de prueba
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 15
para la clase Mai n. Para que el caso de prueba de la clase Mai n compile
se debe eliminar del esqueleto de la clase Mai nTest , especficamente en
el mtodo t est Mai n las instrucciones

/ / TODO r evi ew t he gener at ed t est code and r emove t he def aul t cal l
t o f ai l .
f ai l ( " The t est case i s a pr ot ot ype. " ) ;

- Se pulsa <Crtl+S>para salvar el trabajo.

- Se compila la suite de prueba generada seleccionando: Bui l d |
Compi l e Shoppi ngSui t e. j ava.

- En la ventana Output se ve el resultado de la compilacin, el cual debera
ser exitoso. De no serlo se revisan los errores indicados, se arreglan y se
vuelve a compilar la clase hasta que compile exitosamente.

- El cdigo de la suite de prueba Shoppi ngSui t e debera ser el siguiente:

package shoppi ng;

i mpor t j uni t . f r amewor k. Test ;
i mpor t j uni t . f r amewor k. Test Case;
i mpor t j uni t . f r amewor k. Test Sui t e;

publ i c cl ass Shoppi ngSui t e ext ends Test Case {

publ i c Shoppi ngSui t e( St r i ng t est Name) {
super ( t est Name) ;
}

publ i c st at i c Test sui t e( ) {
Test Sui t e sui t e = new Test Sui t e( " Shoppi ngSui t e" ) ;
sui t e. addTest ( shoppi ng. Mai nTest . sui t e( ) ) ;
sui t e. addTest ( shoppi ng. Pr oduct Test . sui t e( ) ) ;
sui t e. addTest ( shoppi ng. Shoppi ngCar t Test . sui t e( ) ) ;
r et ur n sui t e;
}

pr ot ect ed voi d set Up( ) t hr ows Except i on {
super . set Up( ) ;
}

pr ot ect ed voi d t ear Down( ) t hr ows Except i on {
super . t ear Down( ) ;
}

}



P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 3 Pgina 16

9. Ejecutar la suite de pruebas del paquete shopping que prueba todas las
funcionalidades de sus clases constituyentes

- Se ejecuta la suite de prueba de prueba seleccionando: Run | Run
Fi l e | Run Shoppi ngSui t e. j ava.

- En las ventanas TestResult y Output pueden verse los resultados de la
ejecucin de la suite de pruebas, como se muestra a continuacin





Referencias Bibliogrficas

- Clark, M. J unitPrimer. Disponible en: http://clarkware.com/articles/J UnitPrimer.html
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 1

Creacin de casos de prueba y suites de pruebas usando el JUnit

Objetivo: crear y ejecutar casos de prueba con suites de pruebas usando J Unit y
Netbeans para probar las funcionalidades de una aplicacin que permite registrar el
almacenamiento de paquetes en un almacn.
Esta aplicacin est formada por las clases Cont ai ner , War ehouse y Package,
cuya estructura se muestra a continuacin:

La clase Cont ai ner representa un contenedor que puede almacenar paquetes,
representados como una lista de paquetes y a partir del cual se puede definir
distintos tipos de contenedores, como es el caso de la clase War ehouse, que es
una subclase de Cont ai ner con la caracterstica particular de tener un volumen
limitado para almacenar paquetes, representado por el atributo maxCapaci t y. La
clase Package es la clase que representa los paquetes a almacenar y cada paquete
ocupa un volumen, representado por el atributo vol ume.
Prct ica
4
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 2
Los mtodos de la clase Cont ai ner son los siguientes:
- Cont ai ner ( ) : es el mtodo constructor que crea un nuevo contenedor como
una lista enlazada vaca de paquetes
- add( Package p) : aade un Paquete al Contenedor. Retorna un valor
booleano cuyo valor es t r ue si el paquete fue aadido con xito y f al se en
caso contrario.
- r emove( Package p) : elimina un paquete del contenedor. Retorna un
booleano cuyo valor es true si el objeto Package fue eliminado con xito al
Container o false en caso contrario
- get Vol ume( ) : retorna el volumen total ocupado por todos los paquetes que
estn en el contenedor.
- si ze( ) : retorna la cantidad de paquetes que hay en el contenedor.
- cl ear ( ) : vaca el contenedor eliminando todos los paquetes que estn
almacenados en este.
- cont ai ns( Package p) : retorna true si el Paquete p est almacenado en el
Contenedor, de lo contrario retorna false.
La clase War ehouse hereda los mtodos de la clase Cont ai ner , sobrescribe el
mtodo add( Package p) de la clase Cont ai ner ya que debe comprobar si hay
espacio suficiente en el almacn para almacenar el paquete p. Adems, posee lo
siguientes mtodos adicionales:
- War ehouse( ) : es constructor que crea un nuevo almacn definiendo su
capacidad mxima, adems de ser una lista enlazada vaca de paquetes, al
ser una subclase de la clase Cont ai ner .
- get Packages( ) : este mtodo retorna un iterador que contiene todos los
paquetes almacenados en el almacn en orden ascendente segn su
volumen.
La clase Package posee los siguientes mtodos:
- Package( ) : es el mtodo constructor que crea un nuevo paquete definiendo
su volumen en el valor del atributo vol umen.
- get Vol ume( ) : retorna el volumen que ocupa el paquete.
Despus de crear las clases en Netbeans se debe:
- Crear y ejecutar los casos de prueba para las funcionalidades propias de
cada clase, utilizando los mtodos set Up( ) y t ear Down( ) para evitar la
duplicacin de cdigo y poder reusar los fixtures en cada caso de prueba. A la
hora de hacer las pruebas se debe tener en cuenta lo siguiente:
o Para la realizacin de las pruebas de las clases Cont ai ner y
War ehouse se va a trabajar con un array de 5 packages donde el
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 3
volumen de cada uno ser el resultado de multiplicar 10 por el valor de
la posicin que ocupa en el array ms 1 (10 * ( i + 1) ), para
generar packages con volmenes diferentes.
o En el mtodo Set Up( ) de las clases de prueba de Cont ai ner y
War ehouse se debe comprobar, usando un mtodo asser t , que se
est trabajando con al menos un Package.
o En la prueba del mtodo add( Package p) adems de comprobar
que el paquete se ha aadido de manera exitosa, se debe comprobar
que no se puede agregar un paquete que ya ha sido aadido
previamente.
o En la prueba del mtodo r emove( Package p) adems de comprobar
que se remueve el paquete de manea exitosa, se debe comprobar que
no se pueden remover un paquete si no est almacenado.
o En la prueba del mtodo get Packages( ) se debe comprobar que
los paquetes son devueltos ordenados de menor a mayor segn su
volumen.
- Crear y ejecutar una suite de pruebas que permita ejecutar secuencialmente
las pruebas de todas las funcionalidades de la aplicacin

Pasos a seguir:

1. Crear un nuevo proyecto de tipo Java Application llamado container

- Para esto se debe seleccionar en el men Fi l e | New Pr oj ect

- En la ventana Emergente New Project se debe seleccionar la categora
J ava y dentro de esta categora seleccionar el tipo de proyecto J ava
Appl i cat i on.

- Pulsa el botn Next>.

- En la ventana emergente New Java Application colocar en el campo
Pr oj ect Name el valor Container y asegurar que estn seleccionadas
las dos opciones de la ventana y pulsar el botn Finish.

- Entonces aparecer el proyecto Container con sus carpetas asociadas, el
cual puede verse en la ventana Projects, que se muestra a continuacin:

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 4


2. Crear la clase Container con sus atributos y servicios

Para esto hay que realizar los siguientes pasos:

a. Crear la clase Container

- En el proyecto Container en la carpeta Source Packages seleccionar el
paquete container.

- Pulsar el botn derecho del ratn y seleccionar la opcin New | J ava
Cl ass

- En la ventana emergente New Java Class, escribir en el campo Class
Name el valor Cont ai ner y pulsar el botn Finish

- Entonces se abrir la pestaa correspondiente al esqueleto de cdigo
de la clase Cont ai ner .

b. Definir los atributos y mtodos de la clase Container.

- En la pestaa del cdigo de la clase Cont ai ner escribir el cdigo de
la clase como se muestra a continuacin:

package cont ai ner ;
i mpor t j ava. ut i l . Li nkedLi st ;
i mpor t j ava. ut i l . Li st ;

publ i c cl ass Cont ai ner {

Li st <Package> cont ent s;

publ i c Cont ai ner ( ) {
cont ent s = new Li nkedLi st <Package>( ) ;
}

publ i c bool ean add( Package b) {
r et ur n ! cont ent s. cont ai ns( b) && cont ent s. add( b) ;
}

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 5
publ i c bool ean r emove( Package b) {
r et ur n cont ent s. r emove( b) ;
}

publ i c doubl e get Vol ume( ) {
i nt sum= 0;
f or ( Package b : cont ent s) {
sum+= b. get Vol ume( ) ;
}
r et ur n sum;
}

publ i c i nt si ze( ) {
r et ur n cont ent s. si ze( ) ;
}

publ i c voi d cl ear ( ) {
cont ent s. cl ear ( ) ;
}

publ i c bool ean cont ai ns( Package b) {
r et ur n cont ent s. cont ai ns( b) ;
}

}

- Pulsar <Ctrl+S> para salvar el trabajo realizado hasta ahora. Ntese
que todava no compila ya que tiene dependencias con otras clases no
creadas.

3. Crear la clase Warehouse (subclase de la clase Container) con sus
atributos y servicios

- Para esto hay que realizar los mismos pasos que para la creacin de la clase
Cont ai ner y una vez escritos el cdigo de la clase War ehouse debe verse
de la siguiente forma:

package cont ai ner ;

i mpor t j ava. ut i l . Ar r ayLi st ;
i mpor t j ava. ut i l . Col l ect i ons;
i mpor t j ava. ut i l . Compar at or ;
i mpor t j ava. ut i l . I t er at or ;
i mpor t j ava. ut i l . Li st ;

publ i c cl ass War ehouse ext ends Cont ai ner {

pr i vat e f i nal doubl e maxCapaci t y;

publ i c War ehouse( doubl e capaci t y) {
maxCapaci t y = capaci t y;
}

@Over r i de
publ i c bool ean add( Package b) {
i f ( b. get Vol ume( ) + get Vol ume( ) <= maxCapaci t y) {
r et ur n super . add( b) ;
}
r et ur n f al se;
}

publ i c I t er at or <Package> get Packages( ) {
Li st <Package> copyCont ent s = new Ar r ayLi st <Package>( cont ent s) ;
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 6
Col l ect i ons. sor t ( copyCont ent s, new Compar at or <Package>( ) {

publ i c i nt compar e( Package b1, Package b2) {
/ / r et ur n ( i nt ) b1. get Vol ume( ) - ( i nt ) b2. get Vol ume( ) ;
/ / r et ur n ( i nt ) ( b1. get Vol ume( ) - b2. get Vol ume( ) ) ;
i f ( b1. get Vol ume( ) < b2. get Vol ume( ) ) {
r et ur n - 1;
} el se i f ( b1. get Vol ume( ) == b2. get Vol ume( ) ) {
r et ur n 0;
} el se {
r et ur n 1;
}
}

}) ;
r et ur n copyCont ent s. i t er at or ( ) ;
}

}

- Pulsar <Ctrl+S> para salvar el trabajo realizado hasta ahora. Ntese
que todava no compila ya que tiene dependencias con otras clases no
creadas.

4. Crear la clase Package con sus atributos y servicios

- Para esto hay que realizar los mismos pasos que para la creacin de la clase
Container y una vez escritos el cdigo de la clase Package debe verse de la
siguiente forma:

package cont ai ner ;

publ i c cl ass Package {

pr i vat e doubl e vol ume = 0;

publ i c Package( doubl e vol ume) {
t hi s. vol ume = vol ume;
}

publ i c doubl e get Vol ume( ) {
r et ur n vol ume;
}
}

- Pulsar <Ctrl+S> para salvar el trabajo realizado hasta ahora.

- Construir el proyecto para verificar que no tiene errores. Esto se hace
seleccionando en el men: Bui l d | Bui l d Mai n Pr oj ect .

- En la ventana Output se podr ver el resultado de la accin Build, la
cual debera ser exitosa. De lo contrario se debe revisar el cdigo en
busca de los errores indicados en la ventana Output, corregirlos y
volver a construir el proyecto.

5. Crear un caso de prueba usando JUnit para la clase Container que pruebe
cada uno de sus mtodos, usando el mtodo setUp() para crear los
objetos y estructuras de datos necesarias para establecer el contexto de
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 7
los mtodos del caso de prueba y las condiciones a considerar
establecidas en el enunciado de la prctica.

Para esto hay que realizar los siguientes pasos:

- En la ventana Projects se selecciona la clase para la que se quiere
construir el caso de prueba o TestCase, que en este caso es la clase
Cont ai ner .

- En la barra de men seleccionar Tool s | Cr eat e J uni t Test s.

- Aparece una ventana emergente para seleccionar la versin de J Unit
que se va a usar para crear el caso de prueba. Seleccionar la opcin
J Unit 3.x y pulsar el botn Select.

- Aparece la ventana emergente Create Tests donde se define los
parmetros para generar el esqueleto del caso de prueba. Verificar que
estn seleccionadas todas las opciones y pulsar el botn OK.

- Entonces aparecer la ventana asociada al esqueleto de cdigo del
caso de prueba generado, que es una subclase de la clase Test Case
de J Unit y que tiene el esqueleto de cdigo para los mtodos set Up( )
y t ear Down( ) heredados de la clase Test Case de J Unit, y el
esqueleto de cdigo para los mtodos de prueba de la clase
Cont ai ner , para probar cada uno de los mtodos de la clase usando
el mtodo asser t .

- Una vez creado el caso de prueba para la clase Cont ai ner este
debera de ser:

package cont ai ner ;

i mpor t j uni t . f r amewor k. Test Case;

publ i c cl ass Cont ai ner Test ext ends Test Case {

pr i vat e Cont ai ner cont ai ner = nul l ;
pr i vat e i nt num_Packages_To_Test = 5;
pr i vat e Package[ ] b = nul l ;
pr i vat e doubl e package_Uni t _Vol ume = 10. 0;


publ i c Cont ai ner Test ( St r i ng t est Name) {
super ( t est Name) ;
}

@Over r i de
pr ot ect ed voi d set Up( ) t hr ows Except i on {
asser t Tr ue( " Test case er r or , you must t est at l east 1 Package" ,
num_Packages_To_Test > 0) ;

/ / We cr eat e t he Packages t hat we need.
b = new Package[ num_Packages_To_Test ] ;
f or ( i nt i =0; i <num_Packages_To_Test ; i ++) {
b[ i ] = new Package( ( i +1) *package_Uni t _Vol ume) ;
}
/ / Now, we cr eat e t he Cont ai ner
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 8
cont ai ner = new Cont ai ner ( ) ;
}


@Over r i de
pr ot ect ed voi d t ear Down( ) t hr ows Except i on {
super . t ear Down( ) ;
}

/ **
* Test of add met hod, of cl ass Cont ai ner .
*/
publ i c voi d t est Add( ) {
cont ai ner . cl ear ( ) ;
f or ( i nt i =0; i <num_Packages_To_Test ; i ++) {
asser t Tr ue( " cont ai ner . add( Package) f ai l ed t o add a new Package" ,
cont ai ner . add( b[ i ] ) ) ;
asser t Fal se( " cont ai ner . add( Package) seems t o al l ow t he same
Package t o be added t wi ce" , cont ai ner . add( b[ i ] ) ) ;
asser t Tr ue( " cont ai ner does not cont ai n a Package af t er i t i s
supposed t o have been added" , cont ai ner . cont ai ns( b[ i ] ) ) ;
}
}

/ **
* Test of r emove met hod, of cl ass Cont ai ner .
*/
publ i c voi d t est Remove( ) {
cont ai ner . cl ear ( ) ;
asser t Fal se( " cont ai ner . r emove( Package) shoul d f ai l because Cont ai ner
i s empt y, but i t di dn' t " , cont ai ner . r emove( b[ 0] ) ) ;
f or ( i nt i =0; i <num_Packages_To_Test ; i ++) {
cont ai ner . cl ear ( ) ;
f or ( i nt j =0; j <i ; j ++) {
cont ai ner . add( b[ j ] ) ;
}
f or ( i nt j =0; j <i ; j ++) {
asser t Tr ue( " cont ai ner . r emove( Package) f ai l ed t o r emove a Package
t hat i s supposed t o be i nsi de" , cont ai ner . r emove( b[ j ] ) ) ;
asser t Fal se( " cont ai ner st i l l cont ai ns a Package af t er i t i s
supposed t o have been r emoved! " , cont ai ner . cont ai ns( b[ j ] ) ) ;
}
f or ( i nt j =i ; j <num_Packages_To_Test ; j ++) {
asser t Fal se( " cont ai ner . r emove( Package) di d not f ai l f or a
Package t hat i s not i nsi de" , cont ai ner . r emove( b[ j ] ) ) ;
}
}
}

/ **
* Test of get Vol ume met hod, of cl ass Cont ai ner .
*/
publ i c voi d t est Get Vol ume( ) {
Syst em. out . pr i nt l n( " get Vol ume" ) ;
doubl e expResul t = 0. 0;
doubl e r esul t = 0. 0;

f or ( i nt i =0; i <num_Packages_To_Test ; i ++) {
expResul t = expResul t + b[ i ] . get Vol ume( ) ;
}

cont ai ner . cl ear ( ) ;
f or ( i nt i =0; i <num_Packages_To_Test ; i ++) {
cont ai ner . add( b[ i ] ) ;
}
r esul t = cont ai ner . get Vol ume( ) ;
asser t Equal s( expResul t , r esul t ) ;
}
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 9

/ **
* Test of si ze met hod, of cl ass Cont ai ner .
*/
publ i c voi d t est Si ze( ) {
Syst em. out . pr i nt l n( " si ze" ) ;
cont ai ner . cl ear ( ) ;
f or ( i nt i =0; i <num_Packages_To_Test ; i ++) {
cont ai ner . add( b[ i ] ) ;
}
i nt r esul t = cont ai ner . si ze( ) ;
asser t Equal s( num_Packages_To_Test , r esul t ) ;
}

/ **
* Test of cl ear met hod, of cl ass Cont ai ner .
*/
publ i c voi d t est Cl ear ( ) {
Syst em. out . pr i nt l n( " cl ear " ) ;
cont ai ner . cl ear ( ) ;
}

/ **
* Test of cont ai ns met hod, of cl ass Cont ai ner .
*/
publ i c voi d t est Cont ai ns( ) {
Syst em. out . pr i nt l n( " cont ai ns" ) ;
cont ai ner . cl ear ( ) ;
f or ( i nt i =0; i <num_Packages_To_Test ; i ++) {
cont ai ner . add( b[ i ] ) ;
}
f or ( i nt i =0; i <num_Packages_To_Test - 1; i ++) {
asser t Tr ue( " cont ai ner cont ai ns a
Package" , cont ai ner . cont ai ns( b[ i ] ) ) ;
}
}
}

- Pulsar <Ctrl+S> para para salvar el trabajo.

- Se compila la clase de prueba generada seleccionando en el men
Bui l d | Compi l e Cont ai ner Test . j ava.

- En la ventana Output se ve el resultado de la compilacin, el cual
debera ser exitoso. De no serlo se revisan los errores indicados, se
arreglan y se vuelve a compilar la clase hasta que compile
exitosamente.

6. Ejecutar el caso de prueba de las funcionalidades de la clase Container

- Se ejecuta el caso de prueba seleccionando en el men: Run | Test
Cont ai ner .

- En las ventanas TestResult y Output pueden verse los resultados de la
ejecucin del caso de prueba, como se muestra a continuacin:

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 10






7. Crear un caso de prueba usando JUnit para la clase Warehouse que pruebe
cada uno de sus mtodos, usando el mtodo setUp() para crear los
objetos y estructuras de datos necesarias para establecer el contexto de
los mtodos del caso de prueba y las condiciones a considerar
establecidas en el enunciado de la prctica.

Para esto hay que realizar los siguientes pasos:

- En la ventana Projects se selecciona la clase para la que se quiere
construir el caso de prueba, que en este caso es la clase
War ehouse. j ava

- En la barra de men seleccionar Tool s | Cr eat e J uni t Test s.

- Aparece la ventana emergente Create Tests donde se define los
parmetros para generar el esqueleto del caso de prueba. Verificar que
estn marcadas todas las opciones y pulsar el botn OK. Ntese que no
pregunta por la versin de J Unit, ya que seleccionamos la versin 3.x en
para Cont ai ner Test .

- Entonces aparecer la ventana asociada al esqueleto de cdigo del caso
de prueba generado, que es una subclase de la clase Test Case del
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 11
framework J Unit y que tiene el esqueleto de cdigo para los mtodos
set Up( ) y t ear Down( ) heredados de la clase Test Case del J Unit, y
el esqueleto de cdigo para los mtodos de prueba de la clase
War ehouse, para probar cada uno de los mtodos de la clase usando el
mtodo asser t .

- Una vez creado el caso de prueba para la clase War ehouse este debe
verse de la siguiente manera:

package cont ai ner ;

i mpor t j ava. ut i l . I t er at or ;
i mpor t j ava. ut i l . Li nkedLi st ;
i mpor t j ava. ut i l . Random;

i mpor t j uni t . f r amewor k. Test Case;

publ i c cl ass War ehouseTest ext ends Test Case {

pr i vat e War ehouse War ehouse = nul l ;
pr i vat e i nt num_Packages_To_Test = 5;
pr i vat e i nt War ehouse_Vol ume = num_Packages_To_Test - 1;
pr i vat e Package[ ] b = nul l ;
pr i vat e doubl e package_Uni t _Vol ume = 10. 0;

@Over r i de
pr ot ect ed voi d set Up( ) t hr ows Except i on {
asser t Tr ue( " Test case er r or , you must t est at l east 1 Package" ,
num_Packages_To_Test > 0) ;

asser t Tr ue( " Thi s t est case i s set up assumi ng t hat t he War ehouse
cannot cont ai n al l t he Packages, pl ease check and change par amet er s" ,
num_Packages_To_Test > War ehouse_Vol ume) ;

doubl e War ehouse_capaci t y = 0;

/ / We cr eat e t he Packages t hat we need.
b = new Package[ num_Packages_To_Test ] ;
f or ( i nt i =0; i <num_Packages_To_Test ; i ++) {
i f ( i <War ehouse_Vol ume) {
War ehouse_capaci t y += ( i +1) *package_Uni t _Vol ume;
}
b[ i ] = new Package( ( i +1) *package_Uni t _Vol ume) ;
}

/ / Now, we cr eat e t he War ehouse once we f i gur e out how bi g a War ehouse
we
/ / need.
War ehouse = new War ehouse( War ehouse_capaci t y) ;

}

/ ** Test t o check t hat War ehouse. add( Package) i s i mpl ement ed cor r ect l y */

publ i c voi d t est Add( ) {
War ehouse. cl ear ( ) ;
f or ( i nt i =0; i <War ehouse_Vol ume; i ++) {
asser t Tr ue( " War ehouse. add( Package) f ai l ed t o add a new Package! " ,
War ehouse. add( b[ i ] ) ) ;

asser t Fal se( " War ehouse. add( Package) seems t o al l ow t he same
Package t o be added t wi ce! " , War ehouse. add( b[ i ] ) ) ;

asser t Tr ue( " War ehouse does not cont ai n a Package af t er i t i s
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 12
supposed t o have been added! " , War ehouse. cont ai ns( b[ i ] ) ) ;

}
f or ( i nt i =War ehouse_Vol ume; i <num_Packages_To_Test ; i ++) {

asser t Fal se( " War ehouse. add( Package) al l ows a Package t o be added
even t hough i t i s al r eady f ul l ! " , War ehouse. add( b[ i ] ) ) ;

}
}

/ ** Test t o check t hat War ehouse. get Packages( ) i s i mpl ement ed cor r ect l y
*/
publ i c voi d t est Get Packages( ) {
Randomr nd = new Random( ) ;

War ehouse. cl ear ( ) ;

/ / We put al l t he Packages i nt o a l i st .
Li nkedLi st <Package> l i st = new Li nkedLi st <Package>( ) ;
f or ( i nt i =0; i <War ehouse_Vol ume; i ++) {
l i st . add( b[ i ] ) ;
}

/ / Fi r st we add t he Packages t o t he War ehouse i n some r andom
or der .
f or ( i nt i =0; i <War ehouse_Vol ume; i ++) {
War ehouse. add( l i st . r emove( r nd. next I nt ( l i st . si ze( ) ) ) ) ;
}

/ / Next we cal l t he i t er at or and check t hat t he Packages come out
i n t he cor r ect or der .
I t er at or <Package> i t = War ehouse. get Packages( ) ;
i nt count = 0;
whi l e ( i t . hasNext ( ) && count < War ehouse_Vol ume) {
Package Package = i t . next ( ) ;

asser t Tr ue( " Packages ar e not r et ur ned by War ehouse. get Packages( )
i t er at or i n t he cor r ect or der " , b[ count ] == Package) ;

i f ( b[ count ] ! = Package) {
br eak;
}
count ++;
}
asser t Equal s( " War ehouse. get Packages( ) di d not r et ur n al l t he
Packages" , War ehouse_Vol ume, count ) ;
}
}

- Pulsar <Ctrl+S> en el teclado para salvar el trabajo realizado hasta
ahora.

- Se compila la clase de prueba generada seleccionando en el men
Bui l d | Compi l e War ehouseTest . j ava.

- En la ventana Output se ve el resultado de la compilacin, el cual debera
ser exitoso. De no serlo se revisan los errores indicados, se arreglan y se
vuelve a compilar la clase hasta que compile exitosamente.

8. Ejecutar el caso de prueba para comprobar las funcionalidades de la clase
Warehouse

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 13
- Se ejecuta el caso de prueba seleccionando en el men Run | Test
War ehouse.

- En las ventanas TestResult y Output pueden verse los resultados de la
ejecucin del caso de prueba, como se muestra a continuacin





9. Crear un caso de prueba usando JUnit para la clase Package que pruebe
cada uno de sus mtodos

- En la ventana Projects se selecciona la clase para la que se quiere
construir el caso de prueba, que en este caso es la clase Package.

- En la barra de men seleccionar en el men Tool s | Cr eat e J uni t
Test s.

- Aparece la ventana emergente Create Tests donde se define los
parmetros para generar el esqueleto del caso de prueba. Verificar que
estn marcadas todas las opciones y pulsar OK.

- Entonces aparecer la ventana asociada al esqueleto de cdigo del caso
de prueba generado, que es una subclase de la clase Test Case de J Unit
y que tiene el esqueleto de cdigo para los mtodos set Up( ) y
t ear Down( ) heredados de la clase Test Case de J Unit, y el esqueleto
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 14
de cdigo para los mtodos de prueba de la clase Package, para probar
cada uno de los mtodos de la clase usando el mtodo asser t .

- Una vez creado el caso de prueba para la clase Package este debe verse
de la siguiente manera:

package cont ai ner ;

i mpor t j uni t . f r amewor k. Test Case;

publ i c cl ass PackageTest ext ends Test Case {

publ i c PackageTest ( St r i ng t est Name) {
super ( t est Name) ;
}
/ **
* Test of get Vol ume met hod, of cl ass Package.
*/
publ i c voi d t est Get Vol ume( ) {
Syst em. out . pr i nt l n( " get Vol ume" ) ;
Package i nst ance = new Package( 1. 0) ;
doubl e expResul t = 1. 0;
doubl e r esul t = i nst ance. get Vol ume( ) ;
asser t Equal s( expResul t , r esul t ) ;
}
}



- Pulsar <Ctrl+S> para salvar el trabajo realizado hasta ahora.

- Se compila la clase de prueba generada seleccionando desde el men
Bui l d | Compi l e War ehouseTest . j ava.

- En la ventana Output se ve el resultado de la compilacin, el cual debera
ser exitoso. De no serlo se revisan los errores indicados, se arreglan y se
vuelve a compilar la clase hasta que compile exitosamente.

10. Ejecutar el caso de prueba para comprobar las funcionalidades de la clase
Package

- Se ejecuta el caso de prueba seleccionando Run | Test Package.

- En las ventanas TestResult y Output pueden verse los resultados de la
ejecucin del caso de prueba, como se muestra a continuacin

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 15




11. Crear una suite de pruebas usando JUnit para el paquete container que
pruebe todas sus funcionalidades

- En la ventana Projects se selecciona el paquete para la que se quiere
construir la suite de pruebas, que en este caso es el paquete
cont ai ner .

- En la barra de men seleccionar Tool s | Cr eat e J uni t Test s.

- Aparece la ventana emergente Create Tests donde se define los
parmetros para generar el esqueleto de la suite de pruebas. Verificar que
estn marcadas todas las opciones y pulsar OK. (Puede que se regeneren
mtodos de prueba aadindoles un 1 al nombre del mtodo de prueba,
estos mtodos se pueden borrar o y si no se borran, los nicos que
deberan de generar un error al ejecutar en J Unit).

- Entonces aparecer la ventana asociada al esqueleto de cdigo de la suite
de prueba generada para el paquete cont ai ner .

- Como en el paquete cont ai ner se encuentra la clase Mai n, cuando se
genera la suite de prueba para el paquete se genera automticamente un
caso de prueba para la clase Mai n. Para que el caso de prueba de la
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 16
clase Mai n compile se debe eliminar del esqueleto de la clase Mai nTest ,
especficamente en el mtodo t est Mai n las instrucciones:

/ / TODO r evi ew t he gener at ed t est code and r emove t he def aul t cal l t o
f ai l .
f ai l ( " The t est case i s a pr ot ot ype. " ) ;

- Pulsar <Ctrl+S> para salvar el trabajo.

- Seleccionar Cont ai ner Sui t e. j ava en el proyecto y compilar la suite de
prueba generada desde el men con Bui l d | Compi l e
Cont ai ner Sui t e. j ava.

- En la ventana Output se ve el resultado de la compilacin, el cual debera
ser exitoso. De no serlo se revisan los errores indicados, se arreglan y se
vuelve a compilar la clase hasta que compile exitosamente. El cdigo de la
suite de prueba Cont ai ner Sui t e debera ser el siguiente:

package cont ai ner ;

i mpor t j uni t . f r amewor k. Test ;
i mpor t j uni t . f r amewor k. Test Case;
i mpor t j uni t . f r amewor k. Test Sui t e;

publ i c cl ass Cont ai ner Sui t e ext ends Test Case {

publ i c Cont ai ner Sui t e( St r i ng t est Name) {
super ( t est Name) ;
}

publ i c st at i c Test sui t e( ) {
Test Sui t e sui t e = new Test Sui t e( " Cont ai ner Sui t e" ) ;
sui t e. addTest ( cont ai ner . Mai nTest . sui t e( ) ) ;
sui t e. addTest ( cont ai ner . PackageTest . sui t e( ) ) ;
sui t e. addTest ( cont ai ner . Cont ai ner Test . sui t e( ) ) ;
sui t e. addTest ( cont ai ner . War ehouseTest . sui t e( ) ) ;
r et ur n sui t e;
}

pr ot ect ed voi d set Up( ) t hr ows Except i on {
super . set Up( ) ;
}

pr ot ect ed voi d t ear Down( ) t hr ows Except i on {
super . t ear Down( ) ;
}

}


12. Ejecutar la suite de pruebas del paquete container que prueba todas las
funcionalidades de sus clases constituyentes

- Se ejecuta la suite de prueba de prueba seleccionando: Run | Run
Fi l e | Run Cont ai ner Sui t e. j ava.

- En las ventanas TestResult y Output pueden verse los resultados de la
ejecucin de la suite de pruebas, como se muestra a continuacin
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 4 Pgina 17






P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 5 Pgina 1

Pruebas unitarias con Mocks Objects usando JUnit y EasyMock

Objetivo: crear y ejecutar casos de pruebas usando Mocks Objects para probar una
clase de manera aislada de sus clases colaboradoras usando Mocks Objects con la
herramienta EasyMocks y el framework JUnit y Netbeans.
La aplicacin con la que se va a trabajar en esta prctica es un Videoclub en
Internet. La aplicacin est compuesta por un lado el cliente (clase
Cl i ent Vi deoCl ubSer vi ce) y por otro lado el servidor (interface
I Vi deoCl ubSer vi ce) que entrega los videos (interface I Vi deo). El lado cliente
usa al servidor para obtener los videos y mostrarlos a los usuarios. Esta aplicacin
est formada por las interfaces I Vi deoCl ubSer vi ces, I Vi deo y la clase
Cl i ent Vi deoCl ubSer vi ce cuya estructura se muestra a continuacin:

Despus de crear las interfaces y clases a trabajar en el entorno Netbeans 6.0 se
mostrar como crear y ejecutar un caso de prueba para la clase
Cl i ent Vi deoCl ubSer vi ce usando Mocks Objects para realizar la prueba
simulando con estos los objetos de las interfaces que colaboran con la clase a
probar. Todo se har con Netbeans usando J Unit y la herramienta EasyMock para
manejar los Mocks Objects.

Prct ica
5
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 5 Pgina 2

1. Crear un nuevo proyecto de tipo Java Application llamado VideoClub

- Para esto se debe seleccionar en el men: Fi l e | New Pr oj ect

- En la ventana emergente New Project se debe seleccionar la categora
J ava y dentro de esta categora seleccionar el tipo de proyecto Java
Application

- Pulsar el botn Next>

- En la ventana emergente New Java Application colocar en el campo
Project Name el valor VideoClub y asegurar que estn seleccionadas las
dos opciones de la ventana.

- Pulsar el botn Finish

Entonces aparecer el proyecto VideoClub con sus carpetas asociadas.

2. Crear la clase ClientVideoClubService con sus atributos y servicios

Para esto hay que realizar los siguientes pasos:

a) Crear la clase Cl i ent Vi deoCl ubSer vi ce

- En el Proyecto VideoClub en la carpeta Source Packages seleccionar
el paquete videoclub.

- Pulsar el botn derecho del ratn y seleccionar New | J ava
Cl ass.

- En la ventana emergente New Java Class, escribir en el campo Class
Name el valor Cl i ent Vi deoCl ubSer vi ce y pulsar el botn Finish.

- Entonces se abrir la pestaa correspondiente al esqueleto de cdigo
de la clase Cl i ent Vi deoCl ubSer vi ce.

b) Definir los atributos y mtodos de la clase Cl i ent Vi deoCl ubSer vi ce

- En la pestaa del cdigo de la clase Cl i ent Vi deoCl ubSer vi ce
escribir entre los parntesis delimitadores del cdigo de la clase los
atributos y los mtodos de la clase como se indica a continuacin:

package vi deocl ub;

publ i c cl ass Cl i ent Vi deoCl ubSer vi ce i mpl ement s I Vi deoCl ubSer vi ce {
pr i vat e I Vi deoCl ubSer vi ce r emot eVi deoCl ubSer vi ce;
publ i c Cl i ent Vi deoCl ubSer vi ce( I Vi deoCl ubSer vi ce
r emot eVi deoCl ubSer vi ce) {
i f ( r emot eVi deoCl ubSer vi ce == nul l ) {
t hr ow new I l l egal Ar gument Except i on(
" ' r emot eVi deoCl ubSer vi ce' must not be nul l " ) ;
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 5 Pgina 3
}
t hi s. r emot eVi deoCl ubSer vi ce = r emot eVi deoCl ubSer vi ce;
}

publ i c I Vi deo get Vi deo( i nt Vi deoNumber ) {
r et ur n r emot eVi deoCl ubSer vi ce. get Vi deo( Vi deoNumber ) ;
}
}

- Pulsar <Ctrl+S> para salvar el trabajo realizado.


3. Crear la interfaz IVideoClubService con su servicio getVideo()

a) Crear la interfaz IVideoClubService

- En el Proyecto VideoClub en la carpeta Source Packages seleccionar
el paquete videoclub.

- Pulsar el botn derecho del ratn y seleccionar: New | J ava
I nt er f ace.

- En la ventana emergente New Java Interface, colocar en el campo
Interface Name el valor I Vi deoCl ubSer vi ce y pulsar el botn
Finish.

- Entonces se abrir la pestaa correspondiente al esqueleto de cdigo
de la interfaz I Vi deoCl ubSer vi ce.

b) Definir los mtodos de la interfaz IVideoClubService.

- En la pestaa del cdigo de la interfaz colocar entre los parntesis
delimitadores del cdigo el mtodo de la interfaz. Una vez escritos el
cdigo de la interfaz debe verse de la siguiente forma:

package vi deocl ub;

publ i c i nt er f ace I Vi deoCl ubSer vi ce {
I Vi deo get Vi deo( i nt number ) ;
}

- Pulsar <Ctrl+S> para salvar el trabajo realizado.

4. Crear la interfaz IVideo clase con sus servicios

- Para esto hay que realizar los mismos pasos que para la creacin de la
interfaz I Vi deoCl ubSer vi ce y una vez escrito el cdigo debe verse de
la siguiente forma:

package vi deocl ub;

i mpor t j ava. i o. I nput St r eam;

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 5 Pgina 4
publ i c i nt er f ace I Vi deo {
i nt get Number ( ) ;
St r i ng get Ti t l e( ) ;
I nput St r eamget Dat aAsSt r eam( ) ;
}

- Pulsar <Ctrl+S> para salvar el trabajo realizado.

- Construir el proyecto para verificar que no tiene errores seleccionando en
el men: Bui l d | Bui l d Mai n Pr oj ect .

- En la ventana Output se podr ver el resultado de la accin Build, la cual
debera ser exitosa. De lo contrario se debe revisar el cdigo en busca de
los errores indicados en la ventana Output, corregirlos y volver a construir
el proyecto

5. Crear y ejecutar un caso de prueba para la clase
ClientVideoClubService usando Mocks Objects para realizar la prueba
simulando con estos los objetos de las interfaces que colaboran con la
clase a probar. Todo se har en el ambiente de desarrollo Netbeans usando
JUnit y la herramienta EasyMock para manejar los Mocks Objects.

Para esto hay que realizar los siguientes pasos:

a) Aadir a la carpeta TestLibraries del proyecto VideoClub la biblioteca de
EasyMock
1
.

- Seleccionar la carpeta Test Libraries y presionar el botn derecho del
ratn.

- Del men emergente seleccionar la opcin Add Library

- Si EasyMock no se encuentra en la lista, aadirlo pulsando Create. En la
ventana emergente, en el campo Library Name aadir EasyMock y a su
vez, en la de carpetas, seleccionar el fichero easymock. j ar (donde lo
hayamos descomprimido el fichero easymock2. 4. zi p.





1
EasyMock2.4 debe haberse bajado del sitio ht t p: / / www. easymock. or g/ Downl oads. ht ml y
descromprimirse, por ejemplo, en c: \
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 5 Pgina 5
- Seleccionar la librera de clases EasyMock2.4 y presionar el botn Add
Library.


b) Construir el caso de prueba para la clase ClientVideoClubService.

- En la ventana Projects se selecciona la clase para la que se quiere
construir el caso de prueba, que en este caso es la clase
Cl i ent Vi deoCl ubSer vi ce. j ava.

- En la barra de men seleccionar Tool s | Cr eat e J uni t Test s.

- Aparece una ventana emergente para seleccionar la versin de J Unit
que se va a usar para crear el caso de prueba. Seleccionar la opcin
J Unit 3.x y pulsar el botn Select.

- Aparece la ventana emergente Create Tests donde se define los
parmetros para generar el esqueleto del caso de prueba. Verificar que
estn marcadas todas las opciones excepto la opcin Default Methods
Bodies y pulsar OK.

- Entonces aparecer la ventana asociada al esqueleto de cdigo del
caso de prueba generado, que es una subclase de la clase Test Case
de J Unit y que tiene el esqueleto de cdigo para los mtodos set Up( )
y t ear Down( ) heredados de la clase Test Case del framework J Unit.

- Definir dos Mock Objects para cada una de las interfaces
colaboradoras de la clase que se est probando llamados
r emot eVi deoCl ubSer vi ceMock y Vi deo28Mock e instanciarlos en
el mtodo set Up( ) del caso de prueba usando el mtodo
cr eat eMock( ) de la librera EasyMock. El cdigo asociado a este
paso se muestra a continuacin:

i mpor t or g. easymock. EasyMock;
i mpor t j uni t . f r amewor k. Test Case;

publ i c cl ass Cl i ent Vi deoCl ubSer vi ceTest ext ends Test Case {
pr i vat e I Vi deoCl ubSer vi ce r emot eVi deoCl ubSer vi ceMock;
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 5 Pgina 6
pr i vat e I Vi deo Vi deo28Mock;

pr ot ect ed voi d set Up( ) t hr ows Except i on {
super . set Up( ) ;
Vi deo28Mock = EasyMock. cr eat eMock( I Vi deo. cl ass) ;
r emot eVi deoCl ubSer vi ceMock =
EasyMock. cr eat eMock( I Vi deoCl ubSer vi ce. cl ass) ;
}

- Crear un mtodo para probar el mtodo constructor de la clase
considerando como una excepcin el que no se coloque como
parmetro una instancia de la interfaz I Vi deoCl ubSer vi ce. El
cdigo asociado a este mtodo es el siguiente:

publ i c voi d t est Cl i ent Vi deoCl ubSer vi ce( ) {
t r y {
new Cl i ent Vi deoCl ubSer vi ce( nul l ) ;
f ai l ( " Expect ed I l l egal Ar gument Except i on" ) ;
} cat ch ( I l l egal Ar gument Except i on e) {
/ / expect ed
}
new Cl i ent Vi deoCl ubSer vi ce( r emot eVi deoCl ubSer vi ceMock) ;
}

- Crear un mtodo para probar el mtodo get Vi deo( ) usando los
Mocks Objects creados en el mtodo Set Up( ) . Para esto se debe:

Establecer las expectativas de los Moks Objects usando el mtodo
EasyMock. expect ( ) , definiendo que el nmero del video a
obtener es 28 y que el video a retornar es el Vi deo28Mock.
Colocar en modo Replay el mock object
r emot eVi deoCl ubSer vi ceMock usando el mtodo
EasyMock. r epl ay( ) .
Ejecutar el mtodo que se vaya a probar realizando la prueba
correspondiente
Comprobar al finalizar la prueba que el mock object
r emot eVi deoCl ubSer vi ceMock cumpli las expectativas,
usando el mtodo EasyMock. ver i f y( ) .

- El cdigo de este mtodo de prueba es el siguiente:

publ i c voi d t est Get Vi deo( ) t hr ows Except i on {
EasyMock. expect ( r emot eVi deoCl ubSer vi ceMock. get Vi deo( 28) )
. andRet ur n( Vi deo28Mock) ;
EasyMock. r epl ay( r emot eVi deoCl ubSer vi ceMock) ;

I Vi deoCl ubSer vi ce cl i ent Vi deoCl ubSer vi ce =
new cl i ent Vi deoCl ubSer vi ce( r emot eVi deoCl ubSer vi ceMock) ;
I Vi deo r esul t = cl i ent Vi deoCl ubSer vi ce. get Vi deo( 28) ;
asser t Equal s( Vi deo28Mock, r esul t ) ;

EasyMock. ver i f y( r emot eVi deoCl ubSer vi ceMock) ;
}

- Una vez creado el caso de prueba para la clase
Cl i ent Vi deoCl ubSer vi ce este debe verse de la siguiente manera:
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 5 Pgina 7

package vi deocl ub;

i mpor t or g. easymock. EasyMock;
i mpor t j uni t . f r amewor k. Test Case;

publ i c cl ass Cl i ent Vi deoCl ubSer vi ceTest ext ends Test Case {
pr i vat e I Vi deoCl ubSer vi ce r emot eVi deoCl ubSer vi ceMock;
pr i vat e I Vi deo Vi deo28Mock;

pr ot ect ed voi d set Up( ) t hr ows Except i on {
super . set Up( ) ;
Vi deo28Mock = EasyMock. cr eat eMock( I Vi deo. cl ass) ;
r emot eVi deoCl ubSer vi ceMock =
EasyMock. cr eat eMock( I Vi deoCl ubSer vi ce. cl ass) ;
}

publ i c voi d t est Cl i ent Vi deoCl ubSer vi ce( ) {
t r y {
new Cl i ent Vi deoCl ubSer vi ce( nul l ) ;
f ai l ( " Expect ed I l l egal Ar gument Except i on" ) ;
} cat ch ( I l l egal Ar gument Except i on e) {
/ / expect ed
}
new Cl i ent Vi deoCl ubSer vi ce( r emot eVi deoCl ubSer vi ceMock) ;
}

/ **
* Test of get Vi deo of cl ass Cl i ent Vi deoCl ubSer vi ce.
*/
publ i c voi d t est Get Vi deo( ) t hr ows Except i on {
EasyMock. expect ( r emot eVi deoCl ubSer vi ceMock. get Vi deo( 28) )
. andRet ur n( Vi deo28Mock) ;
EasyMock. r epl ay( r emot eVi deoCl ubSer vi ceMock) ;
I Vi deoCl ubSer vi ce cl i ent Vi deoCl ubSer vi ce =
new Cl i ent Vi deoCl ubSer vi ce( r emot eVi deoCl ubSer vi ceMock) ;
I Vi deo r esul t = cl i ent Vi deoCl ubSer vi ce. get Vi deo( 28) ;
asser t Equal s( Vi deo28Mock, r esul t ) ;
EasyMock. ver i f y( r emot eVi deoCl ubSer vi ceMock) ;

}

}

- Pulsar <Ctrl+S> para salvar el trabajo realizado.

- Se compila la clase de prueba generada seleccionando Bui l d
| Compi l e Cl i ent Vi deoCl ubSer vi ceTest . j ava.

En la ventana Output se ve el resultado de la compilacin, el cual debera ser
exitoso. De no serlo se revisan los errores indicados, se arreglan y se vuelve a
compilar la clase hasta que compile exitosamente.

6. Ejecutar el Caso de Prueba para comprobar las funcionalidades de la clase
Container.

- Se ejecuta el caso de prueba seleccionando Run | Test
Cl i ent Vi deoCl ubSer vi ce.

- En las ventanas TestResult y Output pueden verse los resultados de la
ejecucin del caso de prueba, como se muestra a continuacin.
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 5 Pgina 8







P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 1

Pruebas unitarias de programas en C#.NET usando NUnit

Objetivo: crear y ejecutar casos de pruebas de clase escritas en C#(desde el
entorno Visual C#2008 Express y el framework .NET 2.0) usando NUnit 2.4.8

La aplicacin con la que se va a trabajar en esta prctica es una aplicacin bancaria
con una clase Account (Cuenta) que representa las cuentas de una entidad
bancaria. Sobre las cuentas se puede consultar su saldo, hacer depsitos de dinero,
hacer retiros de dinero y hacer transferencias de dinero a otras cuentas. Esto se
hace respectivamente usando los mtodos Bal ance( ) , Deposi t ( amount ) ,
Wi t hdr aw( amount ) y Tr ansf er Funds( account dest i nat i on, amount ) . El
diagrama de la clase Account se muestra a continuacin.

Despus de crear la clase en el ambiente Visual C# 2008 Express se debe:
Crear y ejecutar un caso de prueba para la clase Account usando el framework
NUnit 2.4.8 y luego ejecutar el caso de prueba desde la interfaz grfica de NUnit.
Prct ica
6
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 2

Pasos a seguir:

1. Crear un nuevo proyecto de tipo Biblioteca de Clases llamado Bank

- Para esto se debe seleccionar en el men: Ar chi vo | Nuevo
Pr oyect o.

- En la ventana Emergente Nuevo Proyecto se debe seleccionar la
categora Biblioteca de clases y en el campo Nombre escribir Bank. Pulsar
el botn Aceptar.



- Entonces aparecer el proyecto Bank con sus carpetas asociadas, como
se muestra en la siguiente Figura.



2. Agregar el Framework NUnit en la carpeta References

Para poder crear las clases de pruebas sebe aadir el framework NUnit a las
libreras que se van a usar en el proyecto. Para esto ha que ejecutar los siguientes
pasos:

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 3
- En el Explorador de soluciones seleccionar la carpeta References



- Presionar el botn derecho del ratn y seleccionar la opcin Agr egar
r ef er enci aEntonces aparecer la ventana emergente Agregar
referencia. En esta ventana seleccionar el componente nunit.framework
1
y
pulsar el botn Aceptar.



- Entonces en la carpeta References aparecer el framework Nunit, como
se muestra en la siguiente figura, el cual ya se puede usar para definir las
clases de prueba en este proyecto.

1
Se debe haber instalado previamente el Framework NUnit 2.4.8 para .NET 2.0, el cual se obtiene de
ht t p: / / www. nuni t . or g/ , el archivo a descargar e instalar es NUni t - 2. 4. 8- net - 2. 0. msi
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 4


3. Crear la clase Account con sus atributos y servicios

- Seleccionar el proyecto Bank

- Presionar el botn derecho del ratn y en men de contexto que aparece
seleccionar la opcin Agr egar | Nuevo el ement oEntonces
aparecer la ventana emergente Agregar nuevo elemento Bank, como
se muestra a continuacin:



- En la ventana emergente seleccionar la opcin Clase C#, escribir en el
campo Nombre Account . cs como nombre de la clase y pulsar
Agregar.

- Entonces aparecer la clase Account en la estructura del proyecto y se
desplegar la pestaa asociada para escribir su cdigo, como se muestra
a continuacin:

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 5


- Escribir el cdigo de la clase Account , como aparece a continuacin:

usi ng Syst em;
usi ng Syst em. Col l ect i ons. Gener i c;
usi ng Syst em. Text ;

namespace Bank
{
cl ass Account
{
pr i vat e f l oat bal ance;

publ i c voi d Deposi t ( f l oat amount )
{
bal ance += amount ;
}
publ i c voi d Wi t hdr aw( f l oat amount )
{
bal ance - = amount ;
}
publ i c voi d Tr ansf er Funds( Account dest i nat i on, f l oat
amount )
{
dest i nat i on. Deposi t ( amount ) ;
Wi t hdr aw( amount ) ;
}
publ i c f l oat Bal ance
{
get { r et ur n bal ance; }
}
}
}

- Guardar los cambios realizados seleccionando la opcin Ar chi vo |
Guar dar Account . cs o la opcin Ar chi vo | Guar dar t odo.
Tambin se puede hacer pulsando los iconos asociados a estas opciones
.

- Compilar el proyecto seleccionando el men Gener ar | Gener ar
Sol uci n.

4. Crear la clase de prueba AccountTest usando NUnit

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 6
- Seleccionar el proyecto Bank.

- Pulsar el botn derecho del ratn y en el men de contexto seleccionar la
opcin Agr egar | Nuevo el ement o.

- En la ventana emergente seleccionar la opcin Clase C#, escribir en el
campo Nombre Account Test . cs como nombre de la clase y pulsar el
botn Agregar.

- Entonces aparecer la clase Account Test en la estructura del proyecto y
se desplegar la pestaa asociada para escribir su cdigo, como se
muestra a continuacin:



- Escribir el cdigo de los mtodos de la clase de prueba:

o Se debe indicar, antes del nombre de la clase, que la clase
Account Test es una clase de prueba y que se va a definir
usando el framewrok NUnit. Para esto se debe:

1. Decir que se va a usar el Framework NUNit con la
instruccin:

usi ng NUni t . Fr amewor k;

2. Usar el atributo Text Fi xt ur e para indicar que la clase es
una clase de prueba, esto se hace con la instruccin:

[ Test Fi xt ur e]

o Escribir los mtodos de prueba de la clase. Para cada mtodo a
escribir se debe:

1. Usar el atributo Test para indicar que es un mtodo de
prueba. Esto se hace con la instruccin:

[ Test ]

2. Escribir el cdigo del mtodo de prueba, usando los
mtodos Asser t s que sean necesarios. Por ejemplo, para
probar el mtodo Tr ansf er Funds( ) , el cdigo del mtodo
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 7
de prueba va a crear una cuenta sour ce que va a inicializar
con un balance de 150 y una cuenta dest i nat i on que va a
inicializar con un balance de 100. Luego se invoca al mtodo
Tr ansf er Funds( ) desde la cuenta sour ce para transferir
una cantidad de 100 a la cuenta dest i nat i on. Luego, para
realizar la prueba se invoca al mtodo
Asser t . Ar eEqual ( ) para la cuenta sour ce y para la
cuenta dest i nat i on, para verificar si despus de ejecutar
el mtodo Tr ansf er Funds( ) , sus valores de bal ance
reflejan los valores esperados, que son respectivamente 250
para la cuenta dest i nat i on y 100 para la cuenta sour ce.

o Una vez escrito el cdigo de los mtodos de la clase de prueba,
este debe verse se la siguiente forma:

usi ng Syst em;
usi ng Syst em. Col l ect i ons. Gener i c;
usi ng Syst em. Li nq;
usi ng Syst em. Text ;

namespace Bank
{
usi ng NUni t . Fr amewor k;

[ Test Fi xt ur e]
publ i c cl ass Account Test
{
[ Test ]
publ i c voi d Deposi t Test ( )
{
Account sour ce = new Account ( ) ;
sour ce. Deposi t ( 200. 00F) ;
Asser t . Ar eEqual ( 200. 00F, sour ce. Bal ance) ;
}

[ Test ]
publ i c voi d Wi t hdr awTest ( )
{
Account sour ce = new Account ( ) ;
sour ce. Deposi t ( 200. 00F) ;
sour ce. Wi t hdr aw( 50. 00F) ;
Asser t . Ar eEqual ( 150. 00F, sour ce. Bal ance) ;
}

[ Test ]
publ i c voi d Tr ansf er FundsTest ( )
{
Account sour ce = new Account ( ) ;
sour ce. Deposi t ( 200. 00F) ;
Account dest i nat i on = new Account ( ) ;
dest i nat i on. Deposi t ( 150. 00F) ;

sour ce. Tr ansf er Funds( dest i nat i on, 100. 00F) ;
Asser t . Ar eEqual ( 250. 00F, dest i nat i on. Bal ance) ;
Asser t . Ar eEqual ( 100. 00F, sour ce. Bal ance) ;
}
}
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 8
}

- Guardar los cambios realizados seleccionando la opcin Ar chi vo |
Guar dar Account . cs o bien Ar chi vo | Guar dar t odo. Tambin se
puede hacer presionando los iconos asociados a estas opciones .

- Compilar el proyecto seleccionando el men Gener ar | Gener ar
Sol uci n. Si el proyecto no compila debido a algn error arreglarlo y
volver a ejecutar este paso hasta que la compilacin y la generacin de la
solucin sea exitosa.

5. Ejecutar los mtodos de la clase de prueba AccountTest usando NUnit

- Iniciar la aplicacin NUnit. Para esto se debe ir al men de Inicio de
Windows, luego en Todos los programas seleccionar el submen NUnit
2.4.8 y all hacer clic sobre el programa NUnit GUI (.NET 2.0). Entonces
aparecer la interfaz grfica de NUnit, como se muestra a continuacin:



- Cargar el archivo . dl l del proyecto en NUnit seleccionando Fi l e |
Open Pr oj ect y aparecer una ventana de dilogo donde se debe
indicae el archivo . dl l resultante de la generacin del proyecto, en este
caso el archivo Bank. dl l
2
, y se pulsar el botn Abrir, como se muestra a
continuacin:


2
Por defecto, la ruta completa del archivo Bank. dl l sera C: \ Document s and
Set t i ngs\ Admi ni st r ador \ Mi s document os\ Vi sual St udi o
2008\ Pr oj ect s\ Bank\ Bank\ bi n\ Rel ease\ Bank. dl l
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 9


- Entonces en la parte izquierda de NUnit aparecer la estructura de la
clase de prueba, que en este caso es la clase Account Test , que
contiene los mtodos de prueba Deposi t Test , Tr ansf er FundsTest y
Wi t hdr awTest . En la parte derecha se encuentran los botones para
ejecutar y parar las pruebas y un rea para desplegar los resultados,
formada por un conjunto de pestaas para mostrar los resultados de la
ejecucin de las pruebas, como se muestra a continuacin:



- Ejecutar el caso de prueba. Para esto se pulsa el botn Run de NUnit y
entonces se desplegar informacin textual y visual de la ejecucin de las
pruebas, como se muestra a continuacin:

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 10


P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 11
Ejercicio adicional

Definir el Fixture de la clase de prueba Account Test para crear e inicializar para
todos los mtodos de prueba que contiene dos instancias de la clase Account ,
sour ce y dest i nat i on, e inicializar la cuenta sour ce con un depsito de 200 y la
cuenta dest i nat i on con un depsito de 150.

Pasos a seguir:

1. Como se ve en el cdigo de la clase de prueba construida anteriormente,
cada uno de los mtodos de prueba crea e inicializa estructuras de manera
redundante. Para evitar esto se debe definir e inicializar el Fixture del caso de
prueba, a travs de la utilizacin del atributo [ Set Up] y el uso del un mtodo
I ni t ( ) para ejecutar los mtodos necesarios. As el cdigo optimizado de la
clase de prueba quedara de la siguiente manera:

usi ng Syst em;
usi ng Syst em. Col l ect i ons. Gener i c;
usi ng Syst em. Text ;

namespace Bank
{
usi ng NUni t . Fr amewor k;

[ Test Fi xt ur e]
publ i c cl ass Account Test
{
Account sour ce;
Account dest i nat i on;

[ Set Up]
publ i c voi d I ni t ( )
{
sour ce = new Account ( ) ;
sour ce. Deposi t ( 200. 00F) ;
dest i nat i on = new Account ( ) ;
dest i nat i on. Deposi t ( 150. 00F) ;
}

[ Test ]
publ i c voi d Deposi t Test ( )
{
Asser t . Ar eEqual ( 200. 00F, sour ce. Bal ance) ;
}

[ Test ]
publ i c voi d Wi t hdr awTest ( )
{
sour ce. Wi t hdr aw( 50. 00F) ;
Asser t . Ar eEqual ( 150. 00F, sour ce. Bal ance) ;
}

[ Test ]
publ i c voi d Tr ansf er FundsTest ( )
{
sour ce. Tr ansf er Funds( dest i nat i on, 100. 00F) ;
Asser t . Ar eEqual ( 250. 00F, dest i nat i on. Bal ance) ;
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 6 Pgina 12
Asser t . Ar eEqual ( 100. 00F, sour ce. Bal ance) ;
}
}
}


2. Despus de modificar el cdigo de la clase de prueba, compilar y generar de
nuevo el proyecto.

3. Guardar las modificaciones realizadas.

4. Ejecutar el caso de prueba. Para ello, en NUnit seleccionar en el men Fi l e
| Rel oad Pr oj ect y ejecutar la pruebas pulsando el botn Run.

Referencias Bibliogrficas

- Nunit.Org. Nunit Quick Start. Disponible en:
http://www.nunit.org/index.php?p=quickStart&r=2.2
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 7 Pgina 1

Practicas opcionales:
- JUnit 4
- Pruebas de cobertura (Emma)
- Anlisis esttico (PMD)
- Pruebas en entornos Web (JMeter)
- Automatizacin de pruebas similares (JTestCase)


Objetivo: Segn el tiempo restante y preferencias, se sugieren unas prcticas para
cubrir otros conceptos de pruebas.

Prct ica
7
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 7 Pgina 2
1. Probar ComplexNumber, con JUnit 4.

- Partiendo de la prctica 2 ya creada, desde el panel de proyectos:
- Indicar a Netbeans que ComplexNumber es el proyecto principal
- Borrar el archivo Compl exNumber Test . j ava. Seleccionar dicho
archivo en el panel de proyecto y con el botn derecho seleccionar
Del et e.

- Regenerar el archivo Compl exNumber Test . j ava otra vez,
seleccionando Compl exNumber . j ava y desde el men seleccionar
Tool s | Cr eat e J Uni t Test . En esta ocasin seleccionando J Unit 4,
en las opciones de la ventana Create Test, comprobar que estn todas las
opciones seleccionadas salvo Defult Method Bodies.



- Completar los en los mtodos de prueba los cuerpos de las funciones tal y
como vienen a continuacin (o como se describi en la practica 2)

package compl exnumber j 4;

i mpor t or g. j uni t . Af t er ;
i mpor t or g. j uni t . Af t er Cl ass;
i mpor t or g. j uni t . Bef or e;
i mpor t or g. j uni t . Bef or eCl ass;
i mpor t or g. j uni t . Test ;
i mpor t st at i c or g. j uni t . Asser t . *;

publ i c cl ass Compl exNumber Test {

pr i vat e Compl exNumber cOneZer o;
pr i vat e Compl exNumber cZer oOne;
pr i vat e Compl exNumber cOneOne;

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 7 Pgina 3
publ i c Compl exNumber Test ( ) {
}

@Bef or eCl ass
publ i c st at i c voi d set UpCl ass( ) t hr ows Except i on {
}

@Af t er Cl ass
publ i c st at i c voi d t ear DownCl ass( ) t hr ows Except i on {
}

@Bef or e
publ i c voi d set Up( ) {
cOneZer o = new Compl exNumber ( 1, 0) ;
cZer oOne = new Compl exNumber ( 0, 1) ;
cOneOne = new Compl exNumber ( 1, 1) ;
}

@Af t er
publ i c voi d t ear Down( ) {
}

/ **
* Test of get Real met hod, of cl ass Compl exNumber .
*/
@Test
publ i c voi d t est Get Real ( ) {
Syst em. out . pr i nt l n( " get Real " ) ;
doubl e expResul t = 0. 0;
doubl e r esul t = cZer oOne. get Real ( ) ;
asser t Equal s( expResul t , r esul t ) ;
}

/ **
* Test of get I magi nar y met hod, of cl ass Compl exNumber .
*/
@Test
publ i c voi d t est Get I magi nar y( ) {
Syst em. out . pr i nt l n( " get I magi nar y" ) ;
doubl e expResul t = 0. 0;
doubl e r esul t = cOneZer o. get I magi nar y( ) ;
asser t Equal s( expResul t , r esul t ) ;
}

/ **
* Test of add met hod, of cl ass Compl exNumber .
*/
@Test
publ i c voi d t est Add( ) {
Syst em. out . pr i nt l n( " mul t i pl y" ) ;
Compl exNumber r esul t = cZer oOne. add( cOneZer o) ;
asser t Equal s( cOneOne, r esul t ) ;
}

/ **
* Test of mul t i pl y met hod, of cl ass Compl exNumber .
*/
@Test
publ i c voi d t est Mul t i pl y( ) {
Syst em. out . pr i nt l n( " mul t i pl y" ) ;
Compl exNumber r esul t = cZer oOne. mul t i pl y( cOneZer o) ;
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 7 Pgina 4
asser t Equal s( cZer oOne, r esul t ) ;
}

/ **
* Test of equal s met hod, of cl ass Compl exNumber .
*/
@Test
publ i c voi d t est Equal s( ) {
Syst em. out . pr i nt l n( " equal s" ) ;
bool ean expResul t = f al se;
bool ean r esul t = cZer oOne. equal s( cOneZer o) ;
asser t Equal s( expResul t , r esul t ) ;
}
}

- Ejecutar los casos de prueba, seleccionando Compl exNumber Test . j ava
en el panel de proyectos y en el men Run | Test Compl exNumber .

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 7 Pgina 5

2. Pruebas de cobertura

a. Instalar los plug-ins de cobertura
1
en Netbeans.

- Seleccionar Tool s | Pl ugi ns.



- Seleccionar Code Cover age y pulsar Install.



- Seleccionar el proyecto de la Prctica 3 de Container, como proyecto
principal. Para ello en el men seleccionar en el panel de proyectos el
proyecto Container y pulsando el botn derecho, en el men de
contexto seleccionar Set as MAin Project.


1
ht t p: / / emma. sour cef or ge. net /
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 7 Pgina 6


- Abrir los distintos ficheros que componen el proyecto y ver como el
cdigo cubierto por los casos de prueba sombreado en un verde
suave.



P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 7 Pgina 7

- Ver el informe de cobertura generado seleccionando el men de
contexto (botn derecho del ratn) desde el panel de proyecto
Container.




P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 7 Pgina 8

3. Anlisis esttico con PMD

- Instalar el plug-in de PDM si no se encuentra disponible. Igual que en el
ejercicio anterior, en el men seleccionar Tool s | Pl ugi ns y comprobar
que est instalado PMD.



- En el proyecto anterior (Container), ir seleccionando las clases y comprobar
que War ehouse. j ava infringe una de las reglas de PMD. Para ello,
seleccionar el panel de proyectos la clase y con el botn derecho en el men
de contexto seleccionar Tool s | Run PMD.


P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 7 Pgina 9

- Se abrir un ventana de PMD en la parte inferior se pueden analizar los
errores reportados.



- Para habilitar/deshabilitar reglas o incorporar nuevos conjuntos de reglas,
desde el men seleccionar Tool s | Opt i ons seleccionar Miscellaneous.
Aparecern tabuladores con las distintas herramientas. Seleccionando PMD
podremos seleccionar las reglas que queremos que nos saque la herramienta
y las




P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 7 Pgina 10
4. Pruebas en entornos Web (JMeter)


- Diseado para pruebas funcionales de carga de recursos estticos y
dinmicos (ficheros, scripts, bases de datos, etc). en entornos Web, FTP, etc.

- Puede funcionar en modo programa (stand-alone) o integrado en Netbeans.
Para test de carga se puede iniciar desde el directorio donde se haya
descomprimido ejecutando el fichero: j met er . bat .

- Con el botn derecho se pueden crear un plan de pruebas, simulando
multitud de opciones nmero de usuarios, y tiempo que se quiere



- Una gua de ejercicios de prueba de carga completa se puede ejecutar la
descrita en Javapassion por Sang Shin:

http://www.javapassion.com/javaperformance/#Load_Testing_with_JMeter



P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 7 Pgina 11

5. Automatizacin de pruebas similares (JTestCase)

- Descargarse el J TestCase y ejecutar el caso de prueba de la calculadora
como ejemplo (en entorno lnea de comandos o Netbeans).

- Mirar e intentar entender el fichero Cal cul at or Test . j ava y el fichero
XML de pruebas (t est - dat a. xml ) con el conjunto de casos de prueba
en XML.




P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 1

Pruebas unitarias de programas con acceso a Bases de Datos usando
DBUnit

Objetivo: Crear y ejecutar casos de pruebas de clase escritas en Java que acceden
a bases de datos en MySQL usando el marco de pruebas DBUnit.
La aplicacin con la que se va a trabajar en esta prctica es una supuesta aplicacin
simplificada de Recursos Humanos. Especficamente se va a trabajar con la clase
Employee (Empleado), cuyas instancias van a ser los empleados de la empresa con
los siguientes atributos:
private String employeeUid: contiene el nmero de identificacin del
empleado en la empresa
private String firstName: contiene el nombre del empleado
private String lastName: contiene el apellido del empleado
private String startDate: contiene la fecha en la que comenz
trabajar el empleado en la empresa
private String ssn: contiene el nmero de seguridad social de
empleado
Los servicios que provee la clase Employee son los siguientes:
public Employee(String number, String stDate, String
Name, String securityNumber, String lastName): es el mtodo
creador de las instancias de empleado
public String getEmployeeUid(): mtodo que permite obtener el
identificador del empleado
public String getStartDate(): mtodo que permite
public String getFirstName(): mtodo que permite obtener el nombre
del empleado
public String getSsn(): mtodo que permite obtener el nmero de
seguridad social del empleado
Prctica
8
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 2
public String getLastName (): mtodo que permite obtener el apellido
del empleado
insertEmployee(): mtodo que inserta al empleado en la tabla employees
de la Base de Datos HR
Despus de crear la clase en java en Netbeans se deben realizar las pruebas de
acceso a la base de datos usando la herramienta DBUnit.
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 3

1. Instalar MySQL

Como se va a trabajar con una Base de Datos (BD) creada usando el Sistema
Gestor de Bases de Datos MySQL, debe estar instalado en el ordenador. Si no est
instalado, se deben seguir los siguientes pasos para su instalacin:

a) Descargar el MySQL Community Server de la direccin:
http://dev.mysql.com/downloads/

b) Ejecutar el archivo descargado y seguir las instrucciones de instalacin y
dejando todas las opciones por defecto.

2. Ejecutar MySQL

Para ejecutar el MySQL en el Men de Inicio de Windows, en la opcin Todos los
programas seleccionar MYSQL, luego seleccionar MySQLServer 5.0 y finalmente
seleccionar MySQL Command Line Client.





P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 4


Entonces aparecer la siguiente ventana donde se pueden ejecutar los comandos
SQL en las Bases de Datos creadas con MySQL.



En la ventana se debe introducir el password del usuario root, colocado en la
configuracin de MySQL. Al introducirlo aparece la lnea de comandos donde se
pueden ejecutar las sentencias SQL para manipular las Bases de Datos en MySQL




3. Crear la Base de Datos HR

P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 5
La Base de Datos HR contendr las tablas de la aplicacin de Recursos Humanos.
Para crear la Base de Datos HR se debe ejecutar en le lnea de comandos de
MySQL la instruccin:

mysql>create database HR;

Una vez que la BD ha sido creada, para abrirla y poder crear y manipular sus tablas
escribir la instruccin:

mysql>use HR;



4. Crear la tabla employees
La tabla employees almacenar toda la informacin de los empleados de la
empresa. Para crearla, podemos hacer desde la lnea de comandos de MySQL
ejecutando la siguiente instruccin:

CREATE TABLE employees(
employeeUid BIGINT,
startDate VARCHAR(10),
firstName VARCHAR(50),
ssn VARCHAR(50),
lastName VARCHAR(50),
PRIMARY_KEY (employeeUid)
);

O bien con MySQL Query Browser con el editor de Tablas:
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 6





Una vez creada la tabla se puede ver su estructura ejecutando la instruccin:

mysql>desc employees;
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 7

Al ejecutarla se desplegar la estructura de la tabla employees, como se muestra a
continuacin:


5. Instalar el controlador para acceder una base de datos en MySQL desde
una aplicacin en Java

Para poder acceder a la tabla employees desde una aplicacin escrita en java se
necesita el SDK de Java y el controlador MySQL. En Netbeans este controlador
debe estar disponible como una biblioteca MYSQL JDBC del proyecto a crear en
Netbeans. Si no est disponible los pasos para descargar e instalarlo en el ambiente
Netbeans hay que ejecutar los siguientes pasos:

a) Descargar el controlador de MySQL:
http://dev.mysql.com/downloads/connector/j/5.1.html.

b) Descomprimir el archivo en el directorio raz

c) Aadir la biblioteca (library) llamada MYSQL JDBC indicando el camino
donde est el archivo .jar correspondiente a Netbeans

d) Finalmente, aadir est biblioteca al proyecto en Netbeans


6. Crear un nuevo proyecto de tipo J ava Application llamado PruebaDBUnit

Para ello, en Netbeans se debe seleccionar: File | New Project

- En la ventana emergente New Project se debe seleccionar la categora Java y
dentro de esta categora seleccionar el tipo de proyecto Java Application.
Pulsar el botn Next>.

- En la ventana emergente New Java Application escribir en el campo Project
Name el valor PruebaDBUnit y asegurar que estn seleccionadas las dos
opciones de la ventana.

- Pulsar el botn Finish.

7. Crear la clase Employee con sus atributos y servicios
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 8

Para esto hay que realizar los siguientes pasos:

a) Crear la clase Employee

- En el proyecto PruebaDBUnit en la carpeta Source Packages
seleccionar el paquete pruebadbuunit. Pulsar el botn derecho
del ratn y seleccionar: New | Java Class .

- En la ventana emergente New Java Class, escribir en el campo
Class Name el valor Employee y pulsar el botn Finish.

- Entonces se abrir la pestaa correspondiente al esqueleto de
cdigo de la clase Employee.

b) Definir los atributos y mtodos de la clase Employee

- Completar la clase Employee con los atributos y los mtodos
descritos a continuacin
1
:

package pruebadbunit;

//~--- JDK imports ------------------------------------------------------------

import java.sql.*;

public class Employee {
private String employeeUid;
private String firstName;
private String lastName;
private String ssn;
private String startDate;

public Employee(String number, String stDate, String Name, String securityNumber,
String lastName)
throws Exception {
if ((number == null) && (lastName == null)) {
throw new IllegalArgumentException("El nmero del empleado y el apellido no
pueden ser nulos");
}

this.employeeUid = number;
this.startDate = stDate;
this.firstName = Name;
this.ssn = securityNumber;
this.lastName = lastName;
}

public String getEmployeeUid() {
return this.employeeUid;
}

public String getStartDate() {
return this.startDate;
}

public String getFirstName() {
return this.firstName;
}

public String getSsn() {

1
Nota: en el mtodo InsertEmployee() se establece la conexin con la BD en MySQL y el procedimiento para
hacer esto est documentado en el cdigo correspondiente
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 9
return this.ssn;
}

public String getLastName() {
return this.lastName;
}

public void InsertEmployee() throws Exception {

// El mtodo InsertEmployee() inserta el Empleado en la tabla employees de la BD
HR
//
// Para esto se establece la conexin con la BD en MySQL, y se manda a ejecutar
la instruccin
// INSERT correspondiente en la BD
//
// la variable con es del tipo java.sql.Connection y a travs de ella se maneja
la conexin con la BD
//
Connection con = null;
Statement stmt = null;
String strSentence;

//
// En la variable strSentence se almacena la instruccin SQL INSERT que se va a
mandar a ejecutar
//
strSentence = "INSERT INTO employees (employeeUid, startDate, firstName, ssn,
lastName) VALUES (\""
+ this.getEmployeeUid() + "\",\"" + this.getStartDate() + "\",\""
+ this.getFirstName() + "\",\""
+ this.getSsn() + "\",\"" + this.getLastName() + "\")";

try {

// En este bloque try se establece una conexin con la BD
// En el String url se define la variable url de JDBC, que es la direccin
para conectarse a la BD HR
//
String url = "jdbc:mysql:///HR";

// En la siguiente insruccin se define el contrlador que debe cargarse para
manejar la conexin
// con la BD, que enste caso es el org.gjt.mm.mysql.Driver
//

Class.forName("com.mysql.jdbc.Driver");

// Class.forName("org.gjt.mm.mysql.Driver");
// En la siguiente lnea se intenta realizar una conexin con la BD,
asignndola a la variable con
// y en esta se especifica la variable URL, y el login y la password para
conectarse a la BD
//
con = DriverManager.getConnection(url, "root", "password");

// Una vez establecida la conexincon la BD, se pueden ejecutar
instrucciones SQL en ella usando
// la conexin
// Para ejecutar una instruccin SQL en la BD primero se crea una variable
que se usar para ejecutar
// la instruccin, que en nuestro caso va a ser la variable stmt
// Se ejecuta la instruccin con.createStatement() que crea y abre un canal
de comunicacin medante
// el que se pueden ejecutar las consultas
//
stmt = con.createStatement();

// Una vez abierto el canal de comunicacin entre la aplicacin y la BD se
manda a ejecutar la
// instruccin SQL, que en nuestro caso est almacenada en el String
strSentence
// usando la instruccin stmt.executeUpdate(strSentence)
//
stmt.executeUpdate(strSentence);
System.out.println("Los valores se aadieron a la BD");
} catch (SQLException e) {
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 10
e.printStackTrace();
} finally {
if (con != null) {
try {
con.close();

// Una vez ejecutada la consulta se cierra la conexin
//abierta con la instruccin stmt.close()
//
stmt.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
}

- Pulsar <Crtl+S> para salvar el trabajo realizado hasta ahora

- Construir el proyecto para verificar que no tiene errores. Esto se
hace seleccionando en el men: Build | Build Main
Project.

- En la ventana Output se podr ver el resultado de la accin Build,
la cual debera ser exitosa. De lo contrario se debe revisar el
cdigo en busca de los errores indicados en la ventana Output,
corregirlos y volver a construir el proyecto.

8. Crear la clase de pruebas DBEmployeeTest para probar el cdigo de la
clase Employee que se conecta con la Base de Datos usando DBUnit

Primero se debe aadir DBUnit como una de las bibliotecas de pruebas a usar en las
clases de prueba. Para ello se debe hacer lo siguiente:

a) Descargar DBUnit de la direccin: http://www.dbunit.org/

b) Aadir DBUnit como una biblioteca en Netbeans que se aadir a las
libreras de pruebas del proyecto que se est desarrollando



Para probar cdigo que accede a Bases de Datos usando la herramienta DBUnit, el
procedimiento general a seguir es el siguiente:
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 11

a) Se define la clase de prueba como una subclase de la clase DBTestCase,
que a su vez es una subclase de la clase TestCase de JUnit

b) Para que la clase de prueba tenga acceso a la BD de pruebas se usa un
objeto que implementa la interface IDataBaseTester. Usando este
objeto se puede hacer la conexin con la Base de Datos, usando las
propiedades del sistema, que estn en la clase System. Todo esto se
define en el mtodo constructor de la clase de prueba a construir.

c) Se debe construir un objeto que implemente la interface IDataSet, y que
contiene un dataset que describe el contenido de la Base de Datos con la
que va a ser inicializada al comienzo de la ejecucin de las pruebas. Para
hacer esto se usa la clase FlatXmlDataSet, que provee funcionalidades
para construir un dataset a partir de un archivo que contenga un
documento XML que describa la estructura y contenido de la BD. La
inicializacin del contenido de la Base de Datos se hace en el mtodo
setUp().

Ahora bien, como el mtodo con acceso a la BD que se va a probar ejecuta
una instruccin INSERT en la BD, implica que se va a alterar el contenido de
la BD y que por lo tanto lo que se quiere ver en la prueba es que el estado de
la Base de Datos haya cambiado de la manera esperada, verificando que se
insert el registro en la BD de manera correcta, es decir, que antes de
ejecutar la instruccin INSERT el registro no estaba en la BD y despus de
ejecutarla se almacen de manera correcta. Para esto, el mtodo que va a
hacer la prueba debe hacer lo siguiente:

a) Inicializar la BD con informacin conocida

b) Ejecutar el mtodo a probar usando los datos definidos para el caso
de prueba

c) Se define la informacin que se espera encontrar en la BD despus
de ejecutar la instruccin (estado esperado de la BD) y se obtiene
la informacin despus de ejecutar la instruccin (estado obtenido
de la BD)

d) Se comparan los estados esperados y obtenidos de la BD a travs
de los mtodos asserts de DBUNit.

Considerando todo lo anterior, el cdigo de la clase de prueba debe ser:

package pruebadbunit;

//~--- non-JDK imports --------------------------------------------------------

import org.dbunit.Assertion;
import org.dbunit.DBTestCase;
import org.dbunit.IDatabaseTester;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 12
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;

import org.junit.Test;
import org.junit.internal.runners.TestClassRunner;
import org.junit.runner.RunWith;

//~--- JDK imports ------------------------------------------------------------

import java.io.File;
import java.sql.SQLException;

@RunWith(TestClassRunner.class)
public class DBEmployeeTest extends DBTestCase {
public DBEmployeeTest() {
//super();

/*
* Mtodo constructor de la clase DBEmployeeTest
* donde se usa el mtodo setProperty de la clase System
* para que la clase System conozca los datos de la conexin con la BD
* como son:
* - EL driver de acceso a la BD, que es "org.gjt.mm.mysql.Driver"
* (tambin se puede colocar como driver el valor "com.mysql.jdbc.Driver" si
se us
* el driver jdbc que ya trea instalado Netbeans en ss librerias)
* - URL de la conexin con la BD HR, que es jdbc:mysql:///HR
* - Login y password para acceder la BD
*/
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS,
"com.mysql.jdbc.Driver");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL,
"jdbc:mysql:///HR");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "root");
System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD,
"pruebas");
}

@Override
protected DatabaseOperation getSetUpOperation() throws Exception {
return DatabaseOperation.CLEAN_INSERT;
}

@Override
protected void setUp() throws Exception {

// super.setUp();
final IDatabaseTester databaseTester = getDatabaseTester();

assertNotNull("DatabaseTester is not set", databaseTester);
databaseTester.setSetUpOperation(getSetUpOperation());
databaseTester.setDataSet(getDataSet());
databaseTester.onSetup();
}

@Override
protected IDataSet getDataSet() throws Exception {
return null; // new FileInputStream("C:/employee-hr-seed-1-registro.xml"));
}

@Test
public void testInsertEmployee() throws Exception {
//
// Inicializacin del caso de prueba
// Se crea un Objeto de la clase Employee, que ser almacenado en la BD con el
mtodo a probar
//
String idEmp = "8";
String startDate = "2005-04-04";
String firstname = "Peter";
String ssn = "000-90-0001";
String lastname = "Gabriel";
Employee instance = new Employee(idEmp, startDate, firstname, ssn, lastname);

try {
// (1) Inicializacin del contenido de la Base de Datos
// Se inicializa la base de datos
P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 13
// En este caso al usar la instruccin TRUNCATE_TABLE de la clase de DBUnit
// DatabaseOperation, se borran todas las filas existentes en la BD,
dejndola vaca.
// La clase DatabaseOperation permite realizar operaciones sobre la BD
// para definir el contenido de la BD antes y despus de ejecutar
// los mtodos de prueba
//
IDatabaseConnection dbConnection = this.getConnection();
IDataSet dsInicialization = new FlatXmlDataSet(new
File("C:/employee-hr-seed-1-registro.xml"));

DatabaseOperation.TRUNCATE_TABLE.execute(dbConnection, dsInicialization);

// (2) Ejecucin del mtodo a probar
instance.InsertEmployee();

// (3) Obtencin del contenido de la tabla Empleado como est en la BD.
// Para esto se usa el mtodo getDataSet de la Interfaz IDatabaseConnection
// que accede a la BD y retorna un dataset que refleja su contenido
// que se asigna a dsObtained
//
IDataSet dsObtained = getConnection().createDataSet();

// (4) Obtencin del contenido esperado
// Para esto se construye un dataset en base al contenido experado de la BD
// despus de ejecutar la prueba y que se encuentra definido como
// un documento xml que se encuentra almacenado en el archivo
// C:/employee-hr-seed-1-registro.xml, su estrcutura es la siguiente:
// <?xml version='1.0' encoding='UTF-8'?>
// <dataset>
// <employees employeeUid='8'
// startDate='2005-04-04'
// firstName='Peter' ssn='000-90-0001'
// lastName='Gabriel' />
// </dataset>
//
// El dataset construido se almacena en dsExpected
//
IDataSet dsExpected = new FlatXmlDataSet(new File("C:/employee-hr-seed-1-
registro.xml"));

// (5) Verificacin
// Se verifica que los contenidos de los datasets esperados y obtenidos
// son iguales, que es lo que se espera
// usando los mtodos Asserts que provee DBUnit
//
Assertion.assertEquals(dsObtained, dsExpected);
//} catch (SQLException e) {
// e.printStackTrace();
// fail("Error al ejecutar un caso de prueba");
} catch (Exception e) {
e.printStackTrace();
fail("Error al ejecutar un caso de prueba");
}
}
}



Crear el fichero: c:\employee-hr-seed-1-registro.xml

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<employees employeeUid='8'
startDate='2005-04-04'
firstName='Peter' ssn='000-90-0001'
lastName='Gabriel' />
</dataset>


P R C T I C A S D E L C U R S O P R U E B A D E S O F T W A R E
Prcticas del curso Prueba de Software Prctica 8 Pgina 14
9. Ejecutar la clase de pruebas DBEmployeeTest para probar el cdigo de la
clase Employee que se conecta con la Base de Datos usando DBUnit

En el men, seleccionar Run | RunFile | Run DBEmployeeTest.java.

You might also like