Very simple step by step JBehave setup tutorial?
Categories:
JBehave Setup: A Simple Step-by-Step Tutorial for BDD in Java

Learn how to quickly set up JBehave with Eclipse and JUnit for Behavior-Driven Development (BDD) in your Java projects. This tutorial covers project creation, dependency management, story writing, and runner configuration.
Behavior-Driven Development (BDD) is a software development process that emerged from Test-Driven Development (TDD). It encourages collaboration among developers, QA, and non-technical or business participants in a software project. JBehave is a BDD framework for Java that allows you to write executable specifications in a human-readable format, often referred to as 'stories'. This tutorial will guide you through setting up a basic JBehave project from scratch using Eclipse and Maven.
1. Project Setup and Dependencies
The first step is to create a new Maven project in Eclipse and add the necessary JBehave dependencies. Maven simplifies dependency management, ensuring all required libraries are automatically downloaded and configured.
1. Create a New Maven Project
In Eclipse, go to File > New > Maven Project
. Select 'Create a simple project (skip archetype selection)' and click 'Next'. Fill in the Group Id (e.g., com.example.bdd
), Artifact Id (e.g., my-jbehave-project
), and Version (e.g., 1.0.0-SNAPSHOT
). Click 'Finish'.
2. Add JBehave and JUnit Dependencies
Open the pom.xml
file in your new project. Add the following dependencies within the <dependencies>
section. These include the core JBehave library, the JBehave JUnit integration, and JUnit itself.
<dependencies>
<dependency>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-core</artifactId>
<version>4.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jbehave</groupId>
<artifactId>jbehave-junit-runner</artifactId>
<version>4.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
Maven dependencies for JBehave and JUnit
2. Writing Your First Story
JBehave stories are plain text files that describe features and scenarios in a human-readable format. They typically follow the Gherkin syntax (Given-When-Then). Create a new folder src/main/resources/stories
(or src/test/resources/stories
if you prefer to keep them with tests) and add your first story file.
1. Create a Story File
Inside src/main/resources/stories
, create a new file named my_first_story.story
. This file will contain the narrative of your feature.
2. Add Story Content
Paste the following content into my_first_story.story
. This simple story describes a calculator's addition functionality.
Narrative: As a user, I want to add two numbers so that I can get their sum
Scenario: Adding two positive numbers
Given I have entered 5 into the calculator
And I have entered 3 into the calculator
When I press the add button
Then the result should be 8
Example JBehave story: my_first_story.story
3. Implementing Step Definitions
Step definitions are Java methods that implement the steps described in your story files. JBehave maps the plain text steps to these methods using annotations. Create a new Java class for your step definitions.
1. Create Step Definition Class
In your src/test/java
folder, create a new package (e.g., com.example.bdd.steps
) and a new Java class named MySteps.java
.
2. Implement Step Methods
Add the following code to MySteps.java
. This class will hold the logic for each step in your story. We'll use a simple Calculator
class for demonstration.
package com.example.bdd.steps;
import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;
import org.junit.Assert;
public class MySteps {
private int number1;
private int number2;
private int result;
@Given("I have entered {0} into the calculator")
public void iHaveEnteredNumberIntoTheCalculator(int number) {
if (number1 == 0) {
this.number1 = number;
} else {
this.number2 = number;
}
}
@When("I press the add button")
public void iPressTheAddButton() {
this.result = number1 + number2;
}
@Then("the result should be {0}")
public void theResultShouldBe(int expectedResult) {
Assert.assertEquals(expectedResult, result);
}
}
Step definitions for my_first_story.story
4. Creating a Story Runner
To execute your JBehave stories, you need a story runner. This is a JUnit-compatible class that tells JBehave where to find your stories and step definitions. It acts as the entry point for running your BDD tests.
1. Create Story Runner Class
In your src/test/java
folder, create a new package (e.g., com.example.bdd.runner
) and a new Java class named MyStoriesRunner.java
.
2. Implement Story Runner
Add the following code to MyStoriesRunner.java
. This class extends JUnitStory
and configures JBehave to find your stories and steps.
package com.example.bdd.runner;
import java.util.List;
import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.io.LoadFromClasspath;
import org.jbehave.core.junit.JUnitStory;
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 com.example.bdd.steps.MySteps;
import static org.jbehave.core.io.CodeLocations.codeLocationFromClass;
import static org.jbehave.core.reporters.Format.CONSOLE;
import static org.jbehave.core.reporters.Format.HTML;
public class MyStoriesRunner extends JUnitStory {
@Override
public Configuration configuration() {
return new MostUsefulConfiguration()
.useStoryLoader(new LoadFromClasspath(this.getClass()))
.useStoryReporterBuilder(new StoryReporterBuilder()
.withCodeLocation(codeLocationFromClass(this.getClass()))
.withDefaultFormats()
.withFormats(CONSOLE, HTML));
}
@Override
public InjectableStepsFactory stepsFactory() {
return new InstanceStepsFactory(configuration(), new MySteps());
}
@Override
protected List<String> storyPaths() {
return new StoryFinder().findPaths(codeLocationFromClass(this.getClass()),
"stories/**/*.story", "");
}
}
JBehave story runner using JUnit
StoryFinder
class is part of JBehave and helps locate story files. Ensure your story files are placed in a location discoverable by the codeLocationFromClass
method, typically src/main/resources
or src/test/resources
.5. Running Your Stories
With the story runner in place, you can now execute your JBehave stories just like any other JUnit test. Eclipse provides a convenient way to run these tests.
1. Run as JUnit Test
Right-click on MyStoriesRunner.java
in Eclipse's Package Explorer. Select Run As > JUnit Test
. Eclipse will execute the runner, which in turn will find and execute your JBehave stories.
2. Review Results
The JUnit view in Eclipse will show the test results. JBehave will also generate reports (e.g., HTML, TXT) in the target/jbehave
directory of your project, providing detailed output of the story execution.
flowchart TD A[Start Eclipse Project] --> B{Add Maven Dependencies} B --> C[Create my_first_story.story] C --> D[Implement MySteps.java] D --> E[Create MyStoriesRunner.java] E --> F[Run MyStoriesRunner as JUnit Test] F --> G{View JUnit Results & JBehave Reports} G --> H[End]
JBehave Setup Workflow
Congratulations! You have successfully set up a basic JBehave project, written a story, implemented step definitions, and executed your first BDD test. This foundational setup can be extended with more complex stories, advanced JBehave features like parameterization, and integration with build tools like Maven or Gradle for automated execution.