jeudi 14 septembre 2017

A template for testing @Validatable classes in Grails

Here is a simple template for testing validateable classes in Grails. Using unroll it makes possible the systematic testing of validation rules.

For more complex validation rules, the require the call to services or involve the setup of multiple attributes of the command object, you might want to add more complex tests.

package my.package

import grails.test.mixin.TestMixin
import grails.test.mixin.web.ControllerUnitTestMixin
import spock.lang.Specification
import spock.lang.Unroll

/** * Created by hschoonjans on 14/09/2017. */
@TestMixin(ControllerUnitTestMixin)
class @artifact.name@ extends Specification {

    @Unroll
    def "It fails to validate a bad value '#value' for the '#field' field"() {
        setup:
        def command = newInstance([(field): value])

        expect:
        !command.validate([field])

        where:
        field       | value
        "someField" | "wrongValue"    }

    @Unroll
    def "It validates a good value '#value' for the '#field' field"() {
        setup:
        def command = newInstance([(field): value])

        expect:
        command.validate([field])

        where:
        field       | value
        "someField" | "goodValue"    }

    private @artifact.name@ newInstance(Map params) {
        new @artifact.name@(params)
    }
}

mercredi 28 juin 2017

Never use System.exit(0) in Grails scripts

A groovy script running in your app Grails console will kill the app if it executes a System.exit(0). Try throwing exceptions instead.