Contenido

JBehave y JUnit

No hace tanto, escribí el artículo JBehave. El problema es que era necesario lanzar cada historia por separado.

Este artículo es un pequeño parche, con la intención de permitir que JUnit encuentre nuestros tests.

Java

Recordando

Bien, recordemos un poco la estructura que teníamos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
.
├── pom.xml
└── src
    └── test
        ├── java
        │   └── org
        │       └── magmax
        │           └── jbehaveexample
        │               ├── MyExample.java
        │               └── MyExampleSteps.java
        └── resources
            └── org
                └── magmax
                    └── jbehaveexample
                        └── my_example.story

Está claro que el programa principal no nos importaba lo más mínimo: tan sólo las pruebas.

Básicamente, en el archivo my_example.story teníamos la especificación en BDD, en MyExampleSteps estaban los pasos para implementarla y utilizábamos MyExample.java para unir ambos mundos.

Integración con JUnit

En este caso vamos a añadir un nuevo archivo, MyExampleTest.java, que integrará nuestros tests con JUnit. Este archivo contendrá el código siguiente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// file: src/test/java/org/magmax/jbehaveexample/MyExampleTest.java
package org.magmax.jbehaveexample;

import java.util.ArrayList;
import java.util.List;
import org.jbehave.core.embedder.Embedder;
import org.junit.Test;

public class MyExampleTest {

    @Test
    public void runClasspathLoadedStoriesAsJUnit() {
        Embedder embedder = new Embedder();
        embedder.runAsEmbeddables(getStoriesList());
    }

    private List<String> getStoriesList() {
        ArrayList<String> result = new ArrayList<String>();
        result.add("org.magmax.jbehaveexample.MyExample");
        return result;
    }
}

Como véis, lo único que hacemos es registrar en JUnit la clase MyExample. Y ya está.

Quiero un test por historia

Pues sí, hay alguna manera. Parece que el truco está en los AnnotatedEmbeddedRunner, pero puedo asegurar que no es trivial. Los ejemplos que hay son bastante complejos.

Por lo que veo, JBehave es muy potente, pero también es complejo de configurar. Eso sí, una vez configurado tendremos una herramienta muy buena :D