Java JavaScript HTML CSS Other
Latest commit e8bb7dc Feb 14, 2017 @janschaefer janschaefer committed on GitHub Merge pull request #304 from hankem/master
minor documentation enhancements regarding @AfterStage
Failed to load latest commit information.
develop introduce checkstyle Aug 17, 2014
docs split sublist item of Scenario Life-Cycle's documentation into two items Feb 13, 2017
example-projects add staging repository to android example project Feb 11, 2017
gradle/wrapper upgrade to gradle v3.3 Feb 11, 2017
jgiven-android-test upgrade to gradle v3.3 Feb 11, 2017
jgiven-android Make gradle-plugin and android projects compile again Feb 11, 2017
jgiven-core adding more details to @AfterStage's JavaDoc Feb 13, 2017
jgiven-examples Merge branch 'RELEASE-0.14.1' Feb 11, 2017
jgiven-gradle-plugin Make gradle-plugin and android projects compile again Feb 11, 2017
jgiven-html-app Merge branch 'RELEASE-0.14.1' Feb 11, 2017
jgiven-html5-report HTML Report: removed unused JS tests Jan 5, 2017
jgiven-java8-tests Initial work to enable the parallel execution of testng data providers ( Aug 28, 2015
jgiven-junit Generate language-dependent classes (fixes #285) (#286) Dec 29, 2016
jgiven-junit5 Initial implementation of JUnit5 integration (#220) Dec 26, 2016
jgiven-maven-plugin Enable building Maven plugin on Windows Dec 31, 2016
jgiven-spring Make gradle-plugin and android projects compile again Feb 11, 2017
jgiven-testng Initial implementation of JUnit5 integration (#220) Dec 26, 2016
jgiven-tests refactored show-tooltip function to be more descriptive Jan 20, 2017
scripts remove promoting from release script for now Dec 29, 2016
.gitignore Generate language-dependent classes (fixes #285) (#286) Dec 29, 2016
.travis.yml Travis: trying trusty image Jan 1, 2017
AUTHORS Update AUTHORS Jul 9, 2015 Merge branch 'RELEASE-0.14.1' Feb 11, 2017 restructure app and improve webpack config Dec 31, 2016
LICENSE added copyright to LICENSE Nov 6, 2014 remove old Java 8 note from Dec 24, 2016
build.gradle Merge branch 'RELEASE-0.14.1' Feb 11, 2017 set version to 0.15.0-SNAPSHOT Dec 29, 2016
gradlew upgrade to gradle v3.3 Feb 11, 2017
gradlew.bat Update the wrapper to Gradle 3.1 Oct 11, 2016
settings.gradle restructure app and improve webpack config Dec 31, 2016
shippable.yml add shippable file Aug 19, 2014

Build Status Coverage Status Apache License 2.0 Maven Central Join the chat at Javadocs


JGiven is a developer-friendly and pragmatic BDD tool for Java. Developers write scenarios in plain Java using a fluent, domain-specific API, JGiven generates reports that are readable by domain experts.

Why another BDD tool?

Behavior-Driven Development (BDD) is a development method where business analysts, developers, and testers describe the behavior of a software product in a common language and notation. Behavior is typically described in terms of scenarios, which are written in the Given-When-Then notation. The common language and notation is one cornerstone of BDD. The other cornerstone is that the defined scenarios are executable, form a comprehensive test suite, and a living documentation for the software product.

In classical BDD tools for Java like JBehave or Cucumber scenarios are written in plain text files. This allows non-developers to write scenarios, because no programming knowledge is required. To make scenarios executable, developers write so-called step-implementations. To bind plain text to step implementations regular expressions are used. For developers maintaining these executable scenarios has a high overhead that is not required if tests would be directly written in a programming language.

Beside the classical BDD tools there are a number of tools for Java to write BDD tests in a programming language like Groovy (easyb) or Scala (ScalaTest). To our knowledge, however, there is no BDD tool where scenarios can be written in plain Java.

Finally, there are specification testing frameworks like Spock (Groovy) or LambdaBehave which are very developer-centric and good for unit-testing, but the generated reports are not in Given-When-Then form and are not easily readable by non-developers.

BDD with JGiven

  • Scenarios are written in standard Java code using a fluent, domain-specific API (no extra language like Scala or Groovy needed, no IDE plugin needed)
  • Java method names and parameters are parsed during test execution (no extra annotations needed)
  • Scenarios are executed by either JUnit or TestNG (no extra test runner needed)
  • Scenarios consist of so-called stages, which share state by injection, providing a modular way of writing Scenarios.
  • JGiven generates scenario reports for business owners and domain experts


public void a_pancake_can_be_fried_out_of_an_egg_milk_and_flour() {
        and().the_ingredient( "flour" );



The above test can be executed like any JUnit test. During the execution, JSON files are generated that can then be used afterwards to generated test reports. By default, a plain text report is shown in the console, which would look as follows:

Scenario: a pancake can be fried out of an egg milk and flour

  Given an egg
    And some milk
    And the ingredient flour
   When the cook mangles everything to a dough
    And the cook fries the dough in a pan
   Then the resulting meal is a pancake

In addition, you can generate a HTML Report.

Getting Started

  1. Start by reading the documentation section on JGiven's website.
  2. See the talk on JGiven held on the TNG Big TechDay


JGiven is published under the Apache License 2.0, see for details.