20 August 2012

Test Cleanliness - GEB vs Cucumber

Look how clean the BDD portion of the cucumber tests are, compared to something like GEB:

Cucumber:
Feature: User searches for book on Amazon.com
  Scenario: User searches for the book Cucumber
    Given a user goes to Amazon.com
    When they input the title Cucumber in the Amazon search field
    And they click submit
    Then  they should see a results list with Cucumber in the title

   Scenario: Amazon user adds The Cucumber Book to their shopping cart
     Given an Amazon user who has selected the Cucumber book
     When they click add to cart
     Then the book is added to their shopping cart

GEB:
 given: "a newly registered user"
            user = newUser(GENDER, USER_DETAILS, [country: cy, postalCode: postalC])
            def locales = [us: "US", aa: "Austrailia", gb: "England", ca: "Cananda", gr: "Germany"]
            getBrowser().reportGroup(getBrowser().reportGroup + "/" + locales[cy] + "/" + pMethod)

        when: "he attempts to purchase product #1"
            login()
            productAd.click()
            sleep 500
            $("input#prod_price").click(ProdPage)
            $("input.agree-accept").click(BillingPage)
            submitBillingInfo(paymentMethod)
                    .confirmPurchase()
                    .completeProductFlow()

...man, that's a lot of ubly BDD code, lets just stop there.  Each of those calls goes to a class or page, that has all the core functions.  So you're looking at lots of code and ugly BDD tests with GEB.

While GEB is readable, it's messy.  Consider Cucumber and how clean it is.  In Cucumber all the real code is in the step_definitions.  It makes the BDD tests so nice to see and read. 

No comments:

Post a Comment