En el artículo anterior, Evolucionando código con Rug, preparamos una receta usando Rug para aplicar a nuestros proyectos maven y de esa forma agregar las configuraciones necesarias para usar JUnit5. En esa ocasión, los cambios los realizamos directamente sobre el proyecto generado. Que hay de las pruebas? Atomist provee un framework para pruebas basado en los conceptos de BDD (Behaviour Driven Development)

Los pruebas se ubican en la siguiente ruta .atomist/tests y su extensión es .rt.

Usando el estilo Given-When-Then describiremos el escenario de nuestro test. Dado un pom.xml con el contenido por defecto de spring-boot. Cuando ejecute el editor AddJUnit5MavenConfig. Entonces validar que el pom.xml contenga los valores declarados en el editor ya mencionado.

scenario Add JUnit5 maven configuration

let resultFile = "pom.xml"

given
    pom.xml = """
    <project>
    	<modelVersion>4.0.0</modelVersion>

    	<groupId>io.eddumelendez.boot</groupId>
    	<artifactId>spring-boot-sample-junit5</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>

    	<name>spring-boot-junit5</name>
    	<description>Demo project for Spring Boot</description>

    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.0.0.BUILD-SNAPSHOT</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>

    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    		<java.version>1.8</java.version>
        </properties>

    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
        	</dependency>

    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
        </dependencies>

    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
        </plugins>
    	</build>

    </project>
    """

when
  AddJUnit5MavenConfig

then
  fileExists resultFile
    and fileContains resultFile "<junit.jupiter.version>5.0.0-M3</junit.jupiter.version>"
    and fileContains resultFile "<junit.platform.version>1.0.0-M3</junit.platform.version>"
    and fileContains resultFile "junit-jupiter-api"
    and fileContains resultFile "maven-surefire-plugin"
    and fileContains resultFile "junit-platform-surefire-provider"
    and fileContains resultFile "junit-jupiter-engine"

Ahora, lo único que debemos hacer es ejecutar el siguiente comando:

rug test AddJUnit5MavenConfig

El terminal debe mostrar el siguiente resultado:

Resolving dependencies for eddumelendez:junit5-rugs:0.1.0 ← local completed
  Generator [JUnit5Generator] uses old style @generator annotation. Use 'generator', rather than 'editor', keyword
Loading eddumelendez:junit5-rugs:0.1.0 ← local into runtime completed
Executing scenario Add JUnit5 dependency...
  Testing assertion fileExists(IdentifierFunctionArg(resultFile,None))
  Testing assertion fileContains(IdentifierFunctionArg(resultFile,None),SimpleLiteral(<junit.jupiter.version>5.0.0-M3</junit.jupiter.version>))
  Testing assertion fileContains(IdentifierFunctionArg(resultFile,None),SimpleLiteral(<junit.platform.version>1.0.0-M3</junit.platform.version>))
  Testing assertion fileContains(IdentifierFunctionArg(resultFile,None),SimpleLiteral(junit-jupiter-api))
  Testing assertion fileContains(IdentifierFunctionArg(resultFile,None),SimpleLiteral(maven-surefire-plugin))
  Testing assertion fileContains(IdentifierFunctionArg(resultFile,None),SimpleLiteral(junit-platform-surefire-provider))
  Testing assertion fileContains(IdentifierFunctionArg(resultFile,None),SimpleLiteral(junit-jupiter-engine))
Running test scenarios in eddumelendez:junit5-rugs:0.1.0 ← local completed

Successfully executed 1 of 1 scenarios: Test SUCCESS

De esta manera, podemos asegurar que los cambios que preparamos en la receta anterior serán aplicados correctamente, asegurando la evolución de nuestros proyectos.

Recursos


Eddú Meléndez

Java Software Engineer, Open Source Contributor