peculiar behaviour of mockDomain
Hi I have the below unit test,
class BookUnitSpec extends UnitSpec {
def "Person_roleOf() is able to retrive the person role based on the ROLETYPE enum"(){
setup: "Mock the person object"
mockDomain(Person); //if I move this line to 3 lines below ... //otherwise the test passes
def person = new Person()
def employee = new Employee(id:1)
def employees = [employee]
// mockDomain(Person); over here I get the below error
mockDomain(PersonRole,employees);
mockDomain(Employee,employees);
when: "Add employee role to the person"
person.addToPersonRoles(employee);
person.save()
then: "Check if the role can be correctly retrieved"
person!=null
person.roleOf(ROLETYPES.EMPLOYEE)!=null;
person.roleOf(ROLETYPES.AUTHOR)==null;
}
}
throws
groovy.lang.MissingMethodException: No signature of method: com.nthdimenzion.domain.base.Person.addToPersonRoles() is applicable for argument types: (com.nthdimenzion.domain.Employee) values: [com.nthdimenzion.domain.Employee@a6cbf7[empId=<null开发者_运维技巧>]]
Possible solutions: addToPersonRoles(java.lang.Object), getPersonRoles()
at org.nthdimenzion.domain.BookUnitSpec.Person_roleOf() is able to retrive the person role based on the ROLETYPE enum(BookUnitSpec.groovy:21)
groovy.lang.MissingMethodException: No signature of method: com.nthdimenzion.domain.base.Person.addToPersonRoles() is applicable for argument types: (com.nthdimenzion.domain.Employee) values: [com.nthdimenzion.domain.Employee@a6cbf7[empId=<null>]]
Possible solutions: addToPersonRoles(java.lang.Object), getPersonRoles()
at org.nthdimenzion.domain.BookUnitSpec.Person_roleOf() is able to retrive the person role based on the ROLETYPE enum(BookUnitSpec.groovy:21)
groovy.lang.MissingMethodException: No signature of method: com.nthdimenzion.domain.base.Person.addToPersonRoles() is applicable for argument types: (com.nthdimenzion.domain.Employee) values: [com.nthdimenzion.domain.Employee@a6cbf7[empId=<null>]]
Possible solutions: addToPersonRoles(java.lang.Object), getPersonRoles()
at org.nthdimenzion.domain.BookUnitSpec.Person_roleOf() is able to retrive the person role based on the ROLETYPE enum(BookUnitSpec.groovy:21)
Any ideas ?
If you change the line which causes the error:
// mockDomain(Person); over here I get the below error
to
mockDomain( Person, [ person ] )
Does it work again? I think you either need to mock the domain object before you create an instance, or you need to pass the instances to the mockDomain
call so that the metaClass
can be set correctly.
精彩评论