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:
com.wmi.tutorials.bdd.stack.specs
sous le dossier de la source de test dans mon espace de travailEt 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?
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:
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.
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 .
Dans mon cas, j'ai étendu ma classe Steps à partir de Steps
j'avais mis à jour le JunitStory à JunitStories et cela a fonctionné
public class StackBehaviourStory étend JUnitStory ---> JunitStories