views:

33

answers:

2

Hello All,

We have a set of integration test which depend upon same set of static data. Since the amount of data is huge we dont want to set it up per test level. Is it possible to setup data at the start, run group of test and rollback the data at the end of test.

What we effectively want is the rollback at test suite level rather than test case level. We are using grails 1.3.1, any pointers would be highly helpful for us to proceed. Thanks in advance.

-Prakash

A: 

for one test case you could use:

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

haven't tried a suite of test cases (yet).

i did have some trouble using findByName in the static methods and had to resort to saving an id and using get.

i did try rolling up a suite, but no joy, getting a: no runnable methods.

Ray Tayek
A: 

You can take control of the transaction/rollback behaviour by marking your test case as non-transactional and managing data, transactions and rollbacks yourself. Example:

class SomeTests extends GrailsUnitTestCase {

    static transactional = false
    static boolean testDataGenerated = false

    protected void setUp() {
        if (!testDataGenerated) {
            generateTestData()
            testDataGenerated = true
        }
    }

    void testSomething() {
        ...test...
    }

    void testSomethingTransactionally() {
        DomainObject.withTransaction {
            ...test...
        }
    }

    void testSomethingTransactionallyWithRollback() {
        DomainObject.withTransaction { status ->
            ...test...
            status.setRollbackOnly()
        }
    }
}
ataylor