UnitTests

January 14th, 2010

Hola Amigos, disculpen el tiempo que no pude postear. Lo que pasa es que en mi trabajo me tenían muy ocupado :)

Hoy no puedo escribir, pero por lo menos quiero compartir dos muy buenos podcasts de los amigos de JavaHispano.

Les recomiendo que escuchen ya que hablan de las estrategias que usaron algunas empresas para implementar un proceso de unittest.

JavaHispano Podcast - 064 - Test de aplicaciones (Parte 1)
* Blog de Alfredo Casado
* Blog de Julio César Pérez
* Blog de Jose Luis Bugarín
* ¿Por qué hacer test?
* Buenas prácticas para programar tests
* Principio FIRST (Ver capítulo 9)
* Dossier sobre el test de software
* Historia de integración: 1, 2, 3, 4
* Blog de Misko Hevery.
* Crear código testeable.
* Desarrollo TDD.

JavaHispano Podcast - 065 - Test de aplicaciones (Parte 2)
* Blog de Julio César Perez
* Blog de Alfredo Casado
* Blog de Jose Luis Bugarin
* Site de Junit: http://www.junit.org/
* Site de DbUnit: http://www.dbunit.org/
* Site de XMLUnit: http://xmlunit.sourceforge.net/
* Site de JMeter: http://jakarta.apache.org/jmeter/
* Site de Selenium: http://seleniumhq.org/
* Site de Watir: http://watir.com/
* Site de EasyMock: http://easymock.org/
* Site de Mockito: http://mockito.org/
* Site de Fitnesse: http://fitnesse.org/
* Site de Concordion:http://www.concordion.org/
* Site de Hudson: https://hudson.dev.java.net/
* Site de WebDriver: http://code.google.com/p/webdriver/
* Site de SoapUi: http://www.soapui.org/
* Plugin de chuck-norris para hudson.

Renan Huanca Unittest


Hello World/Hola Mundo con RESTFul y Spring 3

December 6th, 2009

Introducción.

Este es un ejemplo sencillo de RESTFul usando Spring 3 claro usando maven :)
Para este ejemplo estamos usando el Release Candidate 3 de Spring 3

Dependencias Maven

Solo se necesita una para este ejemplo

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>3.0.0.RC2</version>
        </dependency>

Repositorio Maven de Spring 3

        <repository>
            <id>SpringSource Maven Milestone Repository</id>
            <url>http://maven.springframework.org/milestone</url>
        </repository>

Declarando Spring Servlet

La servlet del spring framework se la declara en el web.xml.
Notemos que en el url-pattern, estamos indicando que vamos a mapear cualquier request a la servlet de spring.

    <servlet>
        <servlet-name>mytest</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mytest</servlet-name>
        <url-pattern>*</url-pattern>
    </servlet-mapping>

Declarando RESTFul Controller

El secreto esta en la anotación RequestMapping. En este caso, el nombre de la variable en url y en java son las mismas, pero se puede personalizar.

 
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
...
 
/**
 * @author Renan Huanca
 * @since Nov 22, 2009  10:54:31 AM
 */
 
@Controller
public class RestController {
 
    @RequestMapping("/{tunombre}/")
    public void readTable(@PathVariable String tunombre,
                          HttpServletRequest request,
                          HttpServletResponse response){
        PrintWriter writer = response.getWriter();
        writer.print("Hola Mundo<br/>");
        writer.print("Como estas "+tunombre);
    }
 
}

Referencias

REST in Spring 3: @MVC

Renan Huanca Spring, maven


Aplicación multi-modulo “Hola Mundo” con Maven

November 1st, 2009

Acá muestro un ejemplo de una aplicación multi-modulo usando maven.

El ejemplo esta basado en este articulo: Chapter 7. Multi-module Enterprise Project

Descripción

Básicamente este ejemplo es solo una aplicación que muestra un el texto “Hola Mundo”.

Esta aplicación esta compuesta por dos módulos: ‘my-webapp’, que define una sevlet que imprime un mensaje y ‘my-module’ que contiene un servicio que devuelve el mensaje que imprime la servlet.

Esta es la estructura de directorios y archivos:

multiapp/
¦   pom.xml
+---my-module
¦   ¦   pom.xml
¦   +---src
¦       +---main
¦           +---java
¦                   HelloWorldService.java
+---my-webapp
    ¦   my-webapp.iml
    ¦   pom.xml
    +---src
        +---main
            +---java
            ¦       HelloWorldServlet.java
            +---webapp
                ¦   index.jsp
                +---WEB-INF
                        web.xml

Archivos pom.xml

pom.xml principal
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>edu.renan</groupId>
    <artifactId>multiapp</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>
    <name>Test Modules App</name>
    <modules>
        <module>my-module</module>
        <module>my-webapp</module>
    </modules>
    <dependencies>
        <dependency>
            <groupId>net.sourceforge.openutils</groupId>
            <artifactId>openutils-testing-testng</artifactId>
            <version>2.2.2</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>multiapp</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

La parte importante en el pom.xml principal es que se definen los módulos: my-webapp y my-module dentro de la etiqueta <modules>

También hay que tomar en cuenta que el packaging es definido como ‘pom’

pom.xml - my-module
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>edu.renan</groupId>
		<artifactId>testmodules</artifactId>
		<version>1.0</version>
	</parent>
	<artifactId>my-module</artifactId>
	<packaging>jar</packaging>
	<name>my-module</name>
</project>

Acá estamos definiendo cual sera el modulo padre usando la etiqueta ≷parent> y el packaging como ‘jar’. Utilice jar por que este modulo generara un jar file.

pom.xml - my-webapp
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>edu.renan</groupId>
        <artifactId>testmodules</artifactId>
        <version>1.0</version>
    </parent>
    <artifactId>my-webapp</artifactId>
    <packaging>war</packaging>
    <version>1.0</version>
    <name>my-webapp</name>
    <dependencies>
        <dependency>
            <groupId>servletapi</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>edu.renan</groupId>
            <artifactId>my-module</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>mywebapp</finalName>
    </build>
</project>

Acá definimos un parent lo mismo que el anterior, pero para el packaging usamos ‘war’, por que este modulo generara una aplicación web.

Classes java y web.xml

HelloWorldService
public class HelloWorldService {
    public String sayHello(){
        return "Hola Mundo";
    }
}

Como verán es solo una clase con un método con un método que retorna el mensaje “Hola Mundo”.

HelloWorldServlet
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
 
public class HelloWorldServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HelloWorldService helloWorldService = new HelloWorldService();
        response.getWriter().println(helloWorldService.sayHello());
    }
}

Esta servlet solo llama al servicio definido anteriormente.

web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
     version="2.4">
 
    <display-name>My Web App</display-name>
    <servlet>
        <servlet-name>helloWorldServlet</servlet-name>
        <servlet-class>HelloWorldServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>helloWorldServlet</servlet-name>
        <url-pattern>/helloWorld</url-pattern>
    </servlet-mapping>
 
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Espero este ejemplo les sirva mucho, si quieren mas recursos acá tienen algunos que encontré:

El código fuente lo pueden encontrar aquí.

Renan Huanca maven