title: How to setup and teardown functional test data in Geb grails
body: <p>I have many working/passing functional geb/spock tests (each extending GebReportingSpec) that are testing a web application with test data all created from the BootStrap.groovy at the beginning of the functional test suite.</p>
  
  <p>I want to move the test data creation into startup() / teardown() methods within each Spec, well actually I wanted to have them inherit it from a base class but apparently the StepWise has issues with inheritance.</p>
  
  <p>So, at present each of my test spec classes look something like:</p>
  
  <pre><code>@Stepwise
  class ExampleSpec extends GebReportingSpec {
  
      def "valid root user logs in"() {
  
          given: "I am at the login page"
          to LoginPage
  
          when: "I enter root's credentials"
          username = "root"
          password = "password"
  
          and: "I click the login button"
          loginButton.click()
  
          then: "I am logged in and directed to the welcome page"
          at WelcomePage
      }
  }
  </code></pre>
  
  <p>Now, my problem is that I can't seem to create a new test (above the first test) that can create test data. Without having a valid given/when/then statement the test doesnt appear to be executed and calling a method from within the existing test also doesnt appear to work. I have looked into the grails-remote-control plugin to help me and I believe this will allow me to successfully envoke closures to setup data but I am not sure on the best mechanism for calling this from within the GebReportSpecs (or some abstract parent).</p>
  
  <p>Below is a brief outline of the kind of thing I want to be able to do, either by making 'setupData()' the first test or by calling that method from within a test... Neither appears to work.</p>
  
  <pre><code>def remote = new RemoteControl()
  def setupData() {
  
      def id = remote {        
          def ShiroUser user = new ShiroUser(username: "root", ...)
          user.save()
          user.id
     }
     println(id)
  }
  
  .... Tests then follow
  </code></pre>
  
  <p>Are there any annotations like @before etc that can force these methods to be invokved?</p>
  
  <p>Any suggestions are appreciated.</p>
  
  <p>Solution:
  I have accepted dmahapatro's response below at the correct answer, but have also provided an example of my final solution below for those who may find it useful.</p>