jBehave
                      A Java library for Behavior Driven Development

                                          By
                              Ajit Skanda Kumaraswamy
                                      (ajit@backbase.com)


                                 Backbase BV Amsterdam
                                        29th May 2012




Tuesday, May 29, 12
In today’s presentation...
            n        What is Acceptance Testing?
            n        What is Behavior Driven Development?
            n        jBehave and its features
            n        An example jBehave test
            n        Salient features of jBehave



Tuesday, May 29, 12
Acceptance Testing


            n        What is Acceptance testing?
            n        Why is it important?
            n        Who writes Acceptance tests? When?



Tuesday, May 29, 12
Behavior Driven Development

            n        What is BDD?

            n        How is it different from TDD?

            n        How do we benefit from it?

            n        Acceptance testing and BDD

            n        BDD using jBehave



Tuesday, May 29, 12
Introduction to jBehave
            n        Basic Concepts
                      n   Story
                      n   Steps Class
                      n   Configuration
            n        Advanced topics
                      n   jBehave with Spring and Maven
            n        Example in jBehave

Tuesday, May 29, 12
jBehave basics 1 - story

                n    A textual representation of the     Example Story
                      business feature to be
                      developed                           Scenario:  trader is not alerted below
                                                          threshold
                                                           
                n    A collection of scenarios for the   Given a stock of symbol STK1 and a
                      given feature                       threshold of 10.0
                                                          When the stock is traded at 5.0
                                                          Then the alert status should be OFF
                n    Can be located on the classpath      
                      or on a url                         Scenario:  trader is alerted above
                                                          threshold
                                                           
                n    Can be written in plain-text,       Given a stock of symbol STK1 and a
                                                          threshold of 10.0
                      ODT format and other formats        When the stock is traded at 11.0
                      like html                           Then the alert status should be ON




Tuesday, May 29, 12
jBehave basics 2 - Steps Class

                n    Mapping textual scenario steps   Example Steps POJO class
                      to Java methods
                                                       public class TraderSteps {
                                                           private Stock stock;

                n    Each annotation corresponds to    
                                                           @Given("a stock of symbol $symbol and a threshold of

                      one step of a given scenario     $threshold")
                                                           public void aStock(String symbol, double threshold) {
                                                               stock = new Stock(symbol, threshold);
                                                           }
                                                        
                n    A simple regex pattern holds         @When("the stock is traded at $price")
                                                           @Alias("the stock is sold at $price")
                      the value                            public void theStockIsTradedAt(double price) {
                                                               stock.tradeAt(price);
                                                           }
                                                        

                n    After/Before - Scenario, Story       @Then("the alert status should be $status")
                                                           public void theAlertStatusShouldBe(String status) {

                      and Stories                              ensureThat(stock.getStatus().name(), equalTo(status));
                                                           }
                                                        
                                                       }

                n    Spring, Configuration based


Tuesday, May 29, 12
jBehave basics 3 - Configuration
                      n    Different ways of running:

                           n   Embedded vs storyPaths
                           n   Local vs Remote

                      n    Embeddable - Combining Configuration and CandidateSteps
                      n    Configuration:

                           n   Story parsing and loading
                           n   StoryReporterBuilder and ViewGenerator

                           n   Multiple stories using JUnitStories
                           n   WebRunner Configuration (Ex. Selenium)




Tuesday, May 29, 12
jBehave advanced - Spring and Maven
            n        Excellent support for Spring framework
                      n   SpringAnnotatedEmbedderRunner
                      n   @UsingSpring
                      n   InjectableStepsFactory for Steps beans
            n        jBehave Maven plugin and its configuration
                      n   unpack, mapping, running, reporting
            n        A concurrent Jenkins plugin


Tuesday, May 29, 12
jBehave - Example



            n        An example from jBehave tutorials - Selenium
                      tests to run stories on etsy.com




Tuesday, May 29, 12
Salient Features of jBehave
            n        Very powerful and flexible
            n        Separation of text stories from code and config
            n        Extensive support for different frameworks and
                      environments
            n        Good documentation/example and online forums
            n        Comprehensive reporting options
            n        Steep learning curve!

Tuesday, May 29, 12
Thank you

                       Questions?




Tuesday, May 29, 12

BDD using JBehave

  • 1.
    jBehave A Java library for Behavior Driven Development By Ajit Skanda Kumaraswamy (ajit@backbase.com) Backbase BV Amsterdam 29th May 2012 Tuesday, May 29, 12
  • 2.
    In today’s presentation... n What is Acceptance Testing? n What is Behavior Driven Development? n jBehave and its features n An example jBehave test n Salient features of jBehave Tuesday, May 29, 12
  • 3.
    Acceptance Testing n What is Acceptance testing? n Why is it important? n Who writes Acceptance tests? When? Tuesday, May 29, 12
  • 4.
    Behavior Driven Development n What is BDD? n How is it different from TDD? n How do we benefit from it? n Acceptance testing and BDD n BDD using jBehave Tuesday, May 29, 12
  • 5.
    Introduction to jBehave n Basic Concepts n Story n Steps Class n Configuration n Advanced topics n jBehave with Spring and Maven n Example in jBehave Tuesday, May 29, 12
  • 6.
    jBehave basics 1- story n A textual representation of the Example Story business feature to be developed Scenario:  trader is not alerted below threshold   n A collection of scenarios for the Given a stock of symbol STK1 and a given feature threshold of 10.0 When the stock is traded at 5.0 Then the alert status should be OFF n Can be located on the classpath   or on a url Scenario:  trader is alerted above threshold   n Can be written in plain-text, Given a stock of symbol STK1 and a threshold of 10.0 ODT format and other formats When the stock is traded at 11.0 like html Then the alert status should be ON Tuesday, May 29, 12
  • 7.
    jBehave basics 2- Steps Class n Mapping textual scenario steps Example Steps POJO class to Java methods public class TraderSteps {     private Stock stock; n Each annotation corresponds to       @Given("a stock of symbol $symbol and a threshold of one step of a given scenario $threshold")     public void aStock(String symbol, double threshold) {         stock = new Stock(symbol, threshold);     }   n A simple regex pattern holds     @When("the stock is traded at $price") @Alias("the stock is sold at $price") the value     public void theStockIsTradedAt(double price) {         stock.tradeAt(price);     }   n After/Before - Scenario, Story     @Then("the alert status should be $status")     public void theAlertStatusShouldBe(String status) { and Stories         ensureThat(stock.getStatus().name(), equalTo(status));     }   } n Spring, Configuration based Tuesday, May 29, 12
  • 8.
    jBehave basics 3- Configuration n Different ways of running: n Embedded vs storyPaths n Local vs Remote n Embeddable - Combining Configuration and CandidateSteps n Configuration: n Story parsing and loading n StoryReporterBuilder and ViewGenerator n Multiple stories using JUnitStories n WebRunner Configuration (Ex. Selenium) Tuesday, May 29, 12
  • 9.
    jBehave advanced -Spring and Maven n Excellent support for Spring framework n SpringAnnotatedEmbedderRunner n @UsingSpring n InjectableStepsFactory for Steps beans n jBehave Maven plugin and its configuration n unpack, mapping, running, reporting n A concurrent Jenkins plugin Tuesday, May 29, 12
  • 10.
    jBehave - Example n An example from jBehave tutorials - Selenium tests to run stories on etsy.com Tuesday, May 29, 12
  • 11.
    Salient Features ofjBehave n Very powerful and flexible n Separation of text stories from code and config n Extensive support for different frameworks and environments n Good documentation/example and online forums n Comprehensive reporting options n Steep learning curve! Tuesday, May 29, 12
  • 12.
    Thank you Questions? Tuesday, May 29, 12