How do I mock validation in domain class for testing? -


i have domain class uses custom validator that's quite complex; requires separate collaborator. i'm creating controller want mock part validation. want able tell when validation error occurs control behavior.

for example, have,

class person {      static constraint = {         key validator: {             //complex stuff goes here         }     }  } 

in controller spec, want able tell when want validation pass or fail. tried doing person.metaclass.validate = { true } doesn't seem work. how test code looks like.

void "test controller when validation passes"() {     when:     controller.json = new person(...)     controller.dosomething()      then:     //test post condition, etc. } 

if nothing works, i'm thinking of mocking command object directly, like,

void "test controller when validation passes"() {     when:     controller.dosomething(mock(person))      then:     1 * _.changestate(_)     //test post condition, etc. } 

but if can first 1 working, i'd prefer more.

i have similar tasks in project. our implementation includes errorscontainer class represents concept of mediator design pattern encapsulating how set of objects interact. mediator promotes loose coupling keeping objects referring each other explicitly, , lets vary interaction independently.

another advantage of approach can cache result of validation process. when applied same preconditions, objects , rulles - can improve performance.

about the

i want able tell when want validation pass or fail

you can call it's isempty() , use in simple code this:

public class validationprocessor {     private errorscontainer errorscontainer;      //process validation       ........      //if validation errors found add them      //into container      ........      //allow manage validation process     public void setvalidationstate(boolean ispassstate){         if(ispassstate){            //set it's state 'pass'            errorscontainer.setempty();         }else{           //apply logic when validation errors found          }     }      public void usecurrentvalidationstate(){         if(errorscontainer.isempty()){            //apply logic when no validation errors found         }else{           //apply logic when validation errors found          }     } } 

Comments

Popular posts from this blog

php - Submit Form Data without Reloading page -

linux - Rails running on virtual machine in Windows -

php - $params->set Array between square bracket -