web-dev-qa-db-fra.com

Très simple, étape par étape, tutoriel d'installation JBehave?

Bien que j'en ai lu beaucoup, mais beaucoup d'articles sur l'utilisation de JBehave, je ne peux pas le faire fonctionner. Voici les étapes que j'ai franchies jusqu'à présent:

  1. Création d'un nouveau projet Java
  2. Téléchargé la version 3.6.8 du fichier JB JBehave et l'a ajouté à mes bibliothèques de chemins de construction
  3. Création d'un package appelé com.wmi.tutorials.bdd.stack.specs sous le dossier de la source de test dans mon espace de travail
  4. Ajout du fichier JB JBehave à la configuration de la bibliothèque de chemin de construction
  5. Création d'une histoire JBehave dans le package susmentionné (StackBehaviourStories.story)
  6. Création d'une classe Java dans le package susmentionné (StackBehaviourStory.Java)
  7. Création d'une classe Java dans le package susmentionné (StackBehaviourSteps.Java)
  8. Importé l'annotation donnée, nommée, puis, quand dans ma classe Java
  9. Ecrit deux scénarios différents dans mon fichier d'histoire JBehave

Et encore, je ne peux pas le faire fonctionner/courir! = (

Le fichier d'histoire:

Narrative:
In order to learn to with JBehave using Eclipse
As a junior Java developer though senior in .Net and in BDD
I want to define the behaviour of a custom stack

Scenario: I Push an item onto the stack
Given I have an empty stack
When  I Push an item 'orange'
Then  I should count 1

Scenario: I pop from the stack
Given I have an empty stack
When  I Push an item 'Apple'
And   I pop the stack
Then  I should count 0

La classe d'histoire

package com.wmi.tutorials.bdd.stack.specs

import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.junit.JUnitStory;

public class StackBehaviourStory extends JUnitStory {
    @Override 
    public Configuration configuration() { return new MostUsefulConfiguration(); }

    @Override
    public InjectableStepsFactory stepsFactory() {
        return new InstanceStepsFactory(configuration()
                                      , new StackBehaviourSteps());   
    }
}

La classe steps

package com.wmi.tutorials.bdd.stack.specs

import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Named;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;
import org.jbehave.core.junit.Assert;

public class StackBehaviourSteps {
    @Given("I have an empty stack")
    public void givenIHaveAnEmptyStack() { stack = new CustomStack(); }

    @When("I Push an item $item")
    public void whenIPushAnItem(@Named("item") String item) { stack.Push(item); }

    @Then("I should count $expected")
    public void thenIShouldCount(@Named("expected") int expected) {
        int actual = stack.count();
        if (actual != expected) 
            throw new RuntimeException("expected:"+expected+";actual:"+actual);
    }
}

J'utilise actuellement Eclipse Kepler (4.3) JEE avec tout ce dont j'ai besoin pour utiliser JUnit, Google App Engine, et oui, JBehave est correctement installé à la suite du didacticiel d'installation d'Eclipse JBehave.

Je n'arrive pas à le faire marcher. Alors, comment puis-je le faire fonctionner correctement avec Eclipse, JBehave et JUnit?

15
Will Marcouiller

En suivant pas à pas le didacticiel jbehave Getting Started , la section Run story indique: [...] la classe ICanToggleACell.Java s’autorisera l’exécution en tant que test JUnit.

Cela signifie que la bibliothèque JUnit est requise dans votre chemin de génération.

Utiliser Eclipse:

  1. Sélectionnez votre projet actuel et cliquez dessus avec le bouton droit de la souris, chemin de génération, configurer le chemin de construction ...
  2. Propriétés de [projet en cours]} _, chemin de construction Java, bibliothèques, cliquez sur [Ajouter une bibliothèque ...]
  3. Ajouter une bibliothèque, sélectionnez JUnit, puis cliquez sur [Suivant].
  4. JUnit Library, version de la bibliothèque JUnit, sélectionnez la version que vous souhaitez utiliser, cliquez sur [Terminer].
  5. Chemin de construction Java, cliquez sur [OK]
  6. Explorateur de projets, sélectionnez votre classe ICanToggleACell.Java, cliquez dessus avec le bouton droit de la souris, puis sur Exécuter en tant que, puis cliquez sur JUnit Test.

Donc, c'est la même chose ici que pour l'exemple de code ci-dessus. La classe StackBehaviourStory.Java doit se laisser exécuter en tant que test JUnit après avoir ajouté la bibliothèque appropriée au chemin de génération Java.

4
Will Marcouiller

Je sais que je suis en retard à la fête ici, mais je poste parce que c’est l’information que j’aurais aimé avoir il ya une semaine car elle m’aurait évité beaucoup de peine. J'aime beaucoup l'idée de BDD, mais je trouve malheureusement que la documentation de JBehave est un peu un cauchemar, en particulier en ce qui concerne l'intégration Maven. De plus, une grande partie du code trouvé sur leur site Web et ailleurs ne fonctionnait pas. Après des essais et des erreurs, ainsi que de nombreux tutoriels, j'ai pu rassembler les éléments suivants. Il fonctionne à la fois dans Maven et Eclipse, possède une classe de liaison unique qui mappe les récits aux fichiers step et est capable de trouver des fichiers d'histoires situés dans src/test/resources. 

voici un fichier pom de travail:

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.projectvalis.st1</groupId>
  <artifactId>st1</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>st1</name>
  <url>http://maven.Apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <build>
    <pluginManagement>
      <plugins>

        <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        <compilerArgument></compilerArgument>
          </configuration>
        </plugin>

       <plugin>  
         <groupId>org.Apache.maven.plugins</groupId>  
         <artifactId>maven-failsafe-plugin</artifactId>  
         <version>${failsafe.and.surefire.version}</version>  
         <executions>  
           <execution>  
             <id>integration-test</id>  
             <goals>  
               <goal>integration-test</goal>  
               <goal>verify</goal>  
             </goals>  
           </execution>  
         </executions>  
         <configuration>  
           <includes>  
             <include>**/*Test.Java</include>  
           </includes>  
         </configuration>  
       </plugin>

       <plugin>
        <groupId>org.jbehave</groupId>
        <artifactId>jbehave-maven-plugin</artifactId>
        <version>4.0.2</version>
            <executions>  
                <execution>  
                    <id>run-stories-as-embeddables</id>  
                    <phase>integration-test</phase>  
                    <configuration>  

                    <includes>  
                        <include>**/*Test.Java</include>  
                    </includes>  
                    <ignoreFailureInStories>false</ignoreFailureInStories>  
                    <ignoreFailureInView>false</ignoreFailureInView>  

                        <systemProperties>
                            <property>
                                <name>Java.awt.headless</name>
                                <value>true</value>
                            </property>
                        </systemProperties>


                    </configuration>  
                    <goals>  
                    <goal>run-stories-as-embeddables</goal>  
                    </goals>  
            </execution>  
             </executions>
       </plugin>

      </plugins>
    </pluginManagement>
  </build>


  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.7</version>
    </dependency>

    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.0.1</version>
    </dependency>

    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.0.1</version>
    </dependency>

    <dependency>
        <groupId>org.Apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.4</version>
    </dependency>

    <dependency>
        <groupId>org.jbehave</groupId>
        <artifactId>jbehave-core</artifactId>
        <version>4.0.2</version>
    </dependency>

  </dependencies>
</project>

voici un exemple de fichier d'histoire

Narrative:
In order to work with files to compress
As a guy who wants to win a bet with cameron
I want to ensure files are ingested and processed in the manner in which the
methods in the ingest class purport to process them. 

Scenario:  Simple test to give JBehave a test drive
Given a file, a.log
When the caller loads the file as a byte array
Then the byte array that is returned contains the correct number of bytes.

voici un exemple de fichier d'étape

package com.projectvalis.compUtils.tests.ingest;

import Java.io.File;

import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Named;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;
import org.jbehave.core.steps.Steps;
import org.junit.Assert;

import com.projectvalis.compUtils.util.fileIO.Ingest;


    /**
     * BDD tests for the ingest class
     * @author funktapuss
     *
     */
    public class LoadByteSteps extends Steps {

        private String fNameS;
        private byte[] byteARR;

        @Given("a file, $filename")
        public void setFileName(@Named("filename") String filename) {
            File file = new File(getClass().getResource("/" + filename).getFile());
            fNameS = file.getPath();
        }

        @When("the caller loads the file as a byte array")
        public void loadFile() {
            byteARR = Ingest.loadFile(fNameS);
        }

        @Then("the byte array that is returned contains the "
                + "correct number of bytes.") 
        public void checkArrSize() {
            File file = new File(fNameS);
            Assert.assertTrue(
                    "loading error - "
                    + "the file and the resultant byte array are different sizes!", 
                    (long)byteARR.length == file.length());
        }


    }

et voici le coureur générique

package com.projectvalis.compUtils.tests.runner;


import Java.util.ArrayList;
import Java.util.Arrays;
import Java.util.List;

import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.io.CodeLocations;
import org.jbehave.core.io.LoadFromClasspath;
import org.jbehave.core.io.StoryFinder;
import org.jbehave.core.junit.JUnitStories;
import org.jbehave.core.reporters.Format;
import org.jbehave.core.reporters.StoryReporterBuilder;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.jbehave.core.steps.InstanceStepsFactory;
import org.jbehave.core.steps.Steps;

import com.projectvalis.compUtils.tests.ingest.LoadByteSteps;



/**
 * generic binder for all JBehave tests. Binds all the story files to the 
 * step files. works for both Eclipse and Maven command line build.  
 * @author funktapuss
 *
 */
public class JBehaveRunner_Test extends JUnitStories {

    @Override 
    public Configuration configuration() { 
        return new MostUsefulConfiguration()            
                .useStoryLoader(
                        new LoadFromClasspath(this.getClass().getClassLoader()))
                .useStoryReporterBuilder(
                        new StoryReporterBuilder()
                            .withDefaultFormats()
                            .withFormats(Format.HTML, Format.CONSOLE)
                            .withRelativeDirectory("jbehave-report")
                );
    }

    @Override
    public InjectableStepsFactory stepsFactory() {
        ArrayList<Steps> stepFileList = new ArrayList<Steps>();
        stepFileList.add(new LoadByteSteps());

        return new InstanceStepsFactory(configuration(), stepFileList);       
    }

    @Override
    protected List<String> storyPaths() {
       return new StoryFinder().
               findPaths(CodeLocations.codeLocationFromClass(
                       this.getClass()), 
                       Arrays.asList("**/*.story"), 
                       Arrays.asList(""));

    }

}

le coureur réside dans src/test/Java//tests.runner.le test d'acquisition réside dans src/test/Java/ /tests.ingest . les fichiers d'historique sont stockés dans src/test/ressources/histoires. 

Autant que je sache, JBehave a BEAUCOUP d'options, alors ce n'est certainement pas la seule façon de faire les choses. Traitez cela comme un modèle qui vous permettra de démarrer rapidement.

la source complète est sur github .

10
David Holiday

Dans mon cas, j'ai étendu ma classe Steps à partir de Steps

0
user3108681

j'avais mis à jour le JunitStory à JunitStories et cela a fonctionné 

public class StackBehaviourStory étend JUnitStory ---> JunitStories

0