16.11.05

Extendiendo JUnit para que verifique expresiones regulares

Saludos.

A veces, escribiendo pruebas unitarias con JUnit, hemos de comprobar resultados complejos.
Utilizando el soporte para expresiones regulares de J2SE a partir de la versión 4 que comentamos en el mensaje anterior, vamos a escribir un nuevo método assert, por ejemplo assertRegExp, que nos permita validar una cadena respecto de una expresión regular. Una posible implementación de este método se muestra a continuación.


public static void assertRegExp(String message, String regexp, String s) {
if (message==null)
message="";
if (!Pattern.matches(regexp, s))
fail(message+" ["+regexp+"] over ["+s+"]");
}

public static void assertRegExp(String regexp, String s) {
assertRegExp(null, regexp, s);
}


Para que funcione, ambos métodos deben estar en una clase que herede de Assert, TestCase o TestDecorator.

Veamos un ejemplo. Supongamos un método "String getDNI()" para el que queremos escribir una prueba que verifique que el resultado está compuesto de 8 dígitos y una letra mayúscula. Una posible prueba utilizando nuestro método assertRegExp se muestra a continuación.


String dni = persona.getDNI();
String expReg = "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][A-Z]";
assertRegExp("DNI incorrecto", expReg, dni);

2 comments:

Anonymous said...

String expReg = "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][A-Z]";

es igual a

String expReg = "[0-9]{9}[A-Z]";

Javier J. said...

Cierto. Gracias !!!!!!