Grails 2.1 Unit Test Command Object mockForConstraintsTests not working?

I used hand-written as well as tests produced by Grails for this command object:

   package myapp

    @grails.validation.Validateable
    class SearchCommand {
       String basisBuild
       String buildToSearch

       static constraints = {
          basisBuild(blank: false)
       }
    }

After my hand wrote unit test, I used Grails:

create-unit-test  myapp.SearchCommand

I filled out Unit Test and made the statement that I should pass on the documentation on the mocked restrictions:

package myapp
import static org.junit.Assert.*

import grails.test.mixin.*
import grails.test.mixin.support.*
import org.junit.*

@TestMixin(GrailsUnitTestMixin)
class SearchCommandTests {

    void setUp() {
        mockForConstraintsTests(SearchCommand)
    }

    void tearDown() {
        // Tear down logic here
    }

    void testSomething() {
        SearchCommand commandUnderTest = new SearchCommand()

        commandUnderTest.validate(basisBuild: "")

        assertEquals "blank", commandUnderTest.errors['basisBuild']
    }
}

Why am I getting this crash?

grails> test-app
| Running 9 unit tests... 9 of 9
| Failure:  testSomething(com.siemens.soarian.sf.gap.SearchCommandTests)
|  java.lang.AssertionError: expected:<blank> but was:<null>
        at org.junit.Assert.fail(Assert.java:93)
+3
source share
3 answers

I believe I have found a way to support grails for unit test Command objects in grails 2.0. You need to use mockCommandObject provided by ControllerUnitTestMixin.

Credit Eric

http://www.jworks.nl/2012/04/12/testing-command-objects-in-grails-2-0/

+5

validate() mockForConstraintsTest , , Grails ( @ ). - ( controller), .

: -

A command , action a controller. . ( ). SearchCommand , assertEquals.

:

void testSomething() {
        YourController controller = mockController(YourController) //Or instantiate
        SearchCommand commandUnderTest = new SearchCommand ()
        //Note the usage here. validate() does not take parameters
        commandUnderTest.basisBuild = ''
        commandUnderTest.validate()

        //Call your action
        controller.searchCommandAction(commandUnderTest)

        assert response.text == 'Returned'
        assertEquals "blank", commandUnderTest.errors['basisBuild']
    }

YourController: -

def searchCommandAction(SearchCommand sc){
    render "Returned"
}

:

- grails @Grails 2.1.4, 2.2.0 2.2.1

, validation mockForConstraintTests controller action:

enter image description here

+2

validate. , , . :

void testSomething() {
    SearchCommand commandUnderTest = new SearchCommand()
    commandUnderTest.basisBuild = ""

    assertFalse commandUnderTest.validate()
    assertEquals 'blank', commandUnderTest.errors['basisBuild']
}

: , @Validatable, grails. .

0

All Articles