своеобразное поведение mockDomain - PullRequest
3 голосов
/ 11 мая 2011

Привет У меня есть ниже модульный тест,

 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;
}
}

броски

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)

Есть идеи?

1 Ответ

4 голосов
/ 11 мая 2011

Если вы измените строку, которая вызывает ошибку:

       //       mockDomain(Person);    over here I get the below error

на

       mockDomain( Person, [ person ] )

Это снова работает?Я думаю, что вам либо нужно смоделировать объект домена до того, как создаст экземпляр, либо вам нужно передать экземпляры в вызов mockDomain, чтобы metaClass мог быть установлен правильно.

...