miércoles, 25 de mayo de 2011

Grails 1.4.0 M1 Released

Wow, the Springsource's team has released a new version of Grails. This has very interesting features. I mention some of them here.

New libraries support:
Spring 3.1 M1,
Groovy 1.8,
Hibernate 3.6,
Servlet 3.0
Tomcat 7.0

New scaffold UI using HTML5

Better and simple unit testing.

Abstract Inheritance. (This is not supported in previous version. Your father class was need to be concret).

GORM API now available to Java

And New OrCreate and OrSave Queries for the dynamic finders.

Grails 1.4 comes with other very good features. You can see a detail Here

I'll testing this very soon, and post here my new experiences with that.

lunes, 25 de abril de 2011

bug.. mocking a domain class inherited gives problem in integration test

Well, i spend a lot of time searching for an issue..
This was happened to me:
I build a service, build an integration test case, and run it
When i made the test pass, i choice to run all my unit and integration test.

But this time, only that integration test failed.

Strange if i run all the integration test, Green light in junit
if i run all the unit and integration test, RED!

Wow, awesome, just was a save and find of an entity object, and that doesnt work.

After many debugging hours i find that the save method of my entity class in the integration test was calling a MockUtils.class. That is not good, i dont want a mock in mi integration test, i want a real implementation of the save method in mi inmemory database.

Well the problem was mocking a inherited domain class, i explained better here

I found a workaround, but i will wait for a fix.

miércoles, 13 de abril de 2011

Mocking the lock method

Just another issue with the grails unit test. I found, (like many others i guess jeje), that the static lock method is not mocked when i use mockDomain(Something).

There is a simple way to mock this:

// URLController.groovy
public class SomethingToTest extends GrailsUnitTestCase{
    public void test_lockMethod(){
        def strictControlUser = mockFor(User); 
        //And then simply do:
        strictControlUser.demand.static.lock(1..1){ Long param1 ->
        return User.get(param1); //In the unit test the get simply works 
    }
}

And done!
Now we are happy again

martes, 12 de abril de 2011

Mocking config parameters

A few days ago, I was writing my testing class for a controller, and i found that I didn't know how to mock a config parameter from Config.groovy.

Supose the following example:

You need to obtain the facebook url from the Config.groovy

environments {
    production {
        grails.facebookURL = "http://www.facebook.url"
    }
}


You have a controller groovy class:

// URLController.groovy
public class UrlController{
    public String getFacebookUrl(){
        return ConfigurationHolder.config.grails.facebookURL;
    }
}


And you want to build its respective unit test:

// URLControllerTests.groovy
public class UrlControllerTests extends GrailsUnitTestCase{
     def urlController;
     public void setUp(){
          super.setUp();
          urlController = new UrlController();
    }
     public void test_getFacebookURL(){
        //Mock configurationholder like this
        ConfigurationHolder.config = [ grails: [facebookURL: 'http://www.facebook.com'] ];
        assertEquals("http://www.facebook.com",urlController.getFacebookUrl());
    }
}


Voila!