Testing Grails services with easyb

how-to
Oct 28, 20102 mins

The Grails easyb plugin has a nifty feature for obtaining instances of service classes. Simply call inject along with the name of your service (i.e. “dateService”) and it’ll auto-magically be available as a variable.

Before you can use this feature, you first must install the easyb plugin like so:

%>grails install-plugin easyb

You can place your .story files (or .specification ones) in any of the sub-directories found in the test directory. For example, if I have a service dubbed DateFormatService that I wish to verify in an easyb story, I can create a story dubbed DateProcessing.story in my test/integration directory.

The story is simple:

scenario "string dates should be converted correctly", {
  given "a date service object", {
    inject "dateFormatService"
  }

  and "and date string", {
    param = "10/07/2010"
  }

  then "the service should return date objects in various formats", {
    date = dateFormatService.day01(param)
    date.time.shouldBe 1285905600000 //i.e. 10/01/2010

    date2 = dateFormatService.day28(param)
    date2.time.shouldBe 1288238400000 //i.e. 10/28/2010
  }
}

Note, to validate java.util.Date instances, I simply convert them into longs and ensure the epoch time is correct. And as you can see from the code above, the call to inject "dateFormatService" makes a variable dubbed dateFormatService available.

By calling inject the entire dependency graph is formally injected too — that is, if service class Foo has a reference to service Bar, then when Foo is injected into an easyb story, Bar will have been pre-injected into Foo (which is distinctly different than calling new Bar().

Invoking the story from the command line is easy too:

%>grails test-app :easyb

This command runs any easyb file found — you can also run individual stories and directories of stories.

For more information on the easyb Grails plugin, check out the Grails plugin page — if you have questions, join the easyb mailing list, baby!

Looking to spin up Continuous Integration quickly? Check out www.ciinabox.com.
andrew_glover

When Andrew Glover isn't listening to “Funkytown” or “Le Freak” he enjoys speaking on the No Fluff Just Stuff Tour. He also writes articles for multiple online publications including IBM's developerWorks and O'Reilly’s ONJava and ONLamp portals. Andrew is also the co-author of Java Testing Patterns, which was published by Wiley in September 2004; Addison-Wesley’s Continuous Integration; and Manning’s Groovy in Action.

More from this author