Liferay JUnit

Liferay JUnit

Es importante recordar que Liferay es una plataforma que aprovecha muchas tecnologías. Debido a esto, en Liferay JUnit también es incluido. Además los SDK de Liferay para los diferentes IDE’s como Eclipse o Spring Tool Suite, simplifican el proceso de compilación y ejecución de las pruebas.

Cuando desarrollamos resulta indispensable verificar que el código cumple con los requisitos establecidos. Este trabajo de testing suele resultar tedioso, e incluso en algunas compañías existen departamentos cuyas funciones se limitan a los procesos de prueba. El problema viene cuando dichos departamentos únicamente realizan pruebas llamadas «de caja negra». Durante las pruebas los tester desconocen el código y en ocasiones no tienen ni acceso a él.

En Liferay JUnit se pueden realizar pruebas unitarias y de integración a diferente nivel. Este post tiene como objetivo explicar la creación, ejecución y obtención de resultados del primero de ellos.

  • Test unitarios simples.
  • Test unitarios usando librerías mockup.
  • Test integración sobre los servicios del core.
  • Test integración sobre servicios personalizados.

Entorno desarrollo

Para la realización de este post, se han utilizado las siguientes herramientas e IDE’s:

  • Spring Tool Suite 3.6.1 Release.
  • Liferay SDK 6.2.0.
  • Liferay 6.2 CE GA3 bundled with Tomcat.

En principio cualquier versión de Eclipse o Spring Tool Suite compatible con el SDK es igualmente válida, al igual que cualquier versión 6.2 de Liferay JUnit.

Estructura del proyecto

En este apartado se define la estructura que se debe crear para desarrollar las pruebas. Esta estructura debe ser creada en un proyecto Portlet, en el cual daremos por supuesto que ya se ha realizado algún tipo de funcionalidad. La estructura necesaria se muestra en la siguiente imagen.

estructura_carpetas

En la carpeta “unit/src” se ubicarán los test unitarios, mientras que en la carpeta “integration/src” se ubicarán los test de integración. En nuestro caso al sólo realizar pruebas unitarias sólo utilizaremos la primera de ellas.

Además debemos añadir al build path ambas carpetas como se puede ver en la imagen siguiente. Para ello y en primer lugar hacemos clic derecho sobre el proyecto, seleccionamos “Java Build Path”, a continuación seleccionamos ambas carpetas y finalmente pulsamos “OK”.

añadir_directorios_buildpath

Creación del test suite

Una vez que tenemos preparada la estructura de carpeta, procederemos a crear nuestro primer “Test Suite”. La funcionalidad que va a ser probada consiste en la obtención de las soluciones de un sistema de ecuaciones con tres incógnitas. La idea de los test unitarios consiste en probar cada pequeña funcionalidad en la cual está descompuesto el sistema o un proceso mayor. Por ello en nuestro caso vamos a probar un método que calcula el valor de un determinante 3×3.

Una vez que tenemos clara la funcionalidad a probar, debemos encontrar los casos de prueba que nos permitan asegurar que el valor del determinante se calcula correctamente. En nuestro caso se proponen dos casos de prueba:

  • Determinante con un valor conocido distinto de cero.
  • Determinante con un valor conocido igual a cero.

A continuación se muestra el código fuente:

import static org.junit.Assert.assertEquals;
import com.piensaenbinario.SistemaEcuacionesPortlet;
import com.piensaenbinario.model.Determinante;
import org.junit.Test;
 
public class UnitTest {
   
  @Test
  public void calDet (){
    SistemaEcuacionesPortlet sisEcu = new SistemaEcuacionesPortlet();
    Determinante det = new Determinante(); 
    det.setA11(12);
    det.setA12(4);
    det.setA13(5);
    det.setA21(4);
    det.setA22(1);
    det.setA23(-2);
    det.setA31(3);
    det.setA32(2); 
    det.setA33(4);
    assertEquals("Determinante con valor", 33.0, sisEcu.calDet (det), 0.0);
    det.setA11(1);
    det.setA12(1);
    det.setA13(1);
    det.setA21(1);
    det.setA22(1);
    det.setA23(1);
    det.setA31(3);
    det.setA32(2); 
    det.setA33(4);
    assertEquals("Determinante linealmente dependiente", 0, sisEcu. calDet (det), 0.0);
  }
}

JUnit permite mediante los “import estáticos” a una clase hacer uso de métodos y variables estáticas de otra clase sin incluir el cualificador.

Mediante la anotación @Test se definen los métodos de prueba. Existen multitud de anotaciones como @Before y @After, los cuales definen los métodos que serán invocados antes y después de cada prueba respectivamente.

Para comparar el resultado obtenido de la ejecución con el valor esperado utilizaremos “assertEquals”. Este método será realmente el encargado de comprobar si la prueba ha sido superada con éxito o no.

Ejecución y resultados

Gracias a la integración de Liferay JUnit  con Ant la compilación, ejecución y la visualización de resultados es muy sencilla. Para compilar los test basta con hacer clic derecho sobre el proyecto seleccionamos “Liferay/compile-test”. De igual manera pasa con la ejecución de las pruebas, en este caso debemos seleccionar “Liferay/test”. En la siguiente imagen se pueden ver ambos procesos.

compilacion_ejecucion_test

Una vez ejecutados los casos de prueba, llega el momento de comprobar el resultado de la prueba. El resultado se puede observar en la consola de nuestro IDE. Como se puede ver en la siguiente imagen.

resultado_consola

Otra opción es hacer doble clic en el fichero “test-results/unit/TEST-UnitTest.xml”. Se nos abrirá la vista de JUnit en nuestro IDE tal y como se muestra a continuación.

resultado_vista

Código fuente

El código fuente de ejemplo se puede descargar desde Gitlab siguiendo el siguiente enlace.

https://gitlab.com/omaikyto/sistema-ecuaciones-portlet

Referencias

JUnit

https://www.liferay.com/es/community/wiki/-/wiki/Main/JUnit

Liferay Testing Infrastructure

https://www.liferay.com/es/community/wiki/-/wiki/Main/Liferay+Testing+Infrastructure

Liferay Spring Tool Suite sencillo de configurar

http://www.piensaenbinario.es/liferay-spring-tool-suite/

Plugin Unit testing in Liferay 6.2

http://blog.open.gr/2014/06/plugin-unit-testing-in-liferay-6-2/

Debes haber iniciado sesión para publicar un comentario.