2016-12-01 5 views
0

Я пытался доказать себе, что addTo сохранит как добавленный объект домена, так и его родительский элемент с сохранением родителя. Я построил этот простой тест:Grails: проблема с AddTo

package testapp 

import grails.test.mixin.TestFor 
import spock.lang.Specification 

/** 
* See the API for {@link grails.test.mixin.domain.DomainClassUnitTestMixin} for usage instructions 
*/ 
@TestFor(Person) 
class PersonSpec extends Specification { 

    def setup() { 
    } 


    def cleanup() { 
    } 

    void "test PersonCreation"() { 
     when: "create a person with a hobby" 
     Hobby h = new Hobby(name: "Fishing") 
     Person p = new Person() 
     p.first="Sam" 
     p.last="Parker" 
     p.age = 30 
     p.addToHobby(h) 
     p.save() 
     then: "Hobby is saved as well" 
     Hobby.count() == 1 
    } 
} 

Запуск его, однако, произвел эту ошибку на p.addToHobby(h) линии:

java.lang.NullPointerException 
    at org.grails.datastore.gorm.GormEntity$Trait$Helper.addTo(GormEntity.groovy:350) 
    at testapp.PersonSpec.test PersonCreation(PersonSpec.groovy:27) 


Process finished with exit code 255 

домена классы так просто, как можно было бы ожидать:

Person :

package testapp 

class Person { 

    String first 
    String last 
    Integer age 

    static hasMany = [hobby: Hobby] 

    static constraints = {} 
} 

Хобби:

class Hobby { 
    String name 
    static constraints = {} 
    static belongsTo = [person: Person] 

} 

Я пробовал очистить и перекомпилировать, без изменений. (Версия Grails 3.2.2)

ответ

1

Вам нужна аннотация @Mock для Person and Hobby. Это добавит динамические методы (например, addTo) к классам доменов.

@Mock([Person, Hobby]) 
class PersonSpec extends Specification { 
    ...your test code... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^