Grails 2.5.5 w/Spock集成测试在使用addTo*()时失败

Grails 2.5.5 w/Spock集成测试在使用addTo*()时失败,grails,integration-testing,spock,Grails,Integration Testing,Spock,这让我快发疯了。2.4.4我的集成测试全部通过。升级到2.5.5后,我到处都会遇到这样的错误: No signature of method: Project.addToMonitorings() is applicable for argument types: (Monitoring) values: [Monitoring : (unsaved)] Possible solutions: getMonitorings() 我似乎无法跟踪如何更新集成测试以使其再次通过 示例(当前)测试:

这让我快发疯了。2.4.4我的集成测试全部通过。升级到2.5.5后,我到处都会遇到这样的错误:

No signature of method: Project.addToMonitorings() is applicable for argument types: (Monitoring) values: [Monitoring : (unsaved)] Possible solutions: getMonitorings()
我似乎无法跟踪如何更新集成测试以使其再次通过

示例(当前)测试:


在我的应用程序中,只要有一对多的关系,我就会发现这个错误。它们在2.4.4中工作得非常好。

以下是我必须做的事情,以使其正常工作。数据工厂中的getMonitoring方法已将项目添加到对象中。它必须隐式地执行addTo

import groovy.sql.Sql;
import org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap

import spock.lang.*

class MonitoringServiceSpec extends Specification {
    def f = new TestDataFactory()
    def proj

    def sql
    def dataSource
    def monitoringService

    def setup() {
        sql = new Sql(dataSource);
        proj = f.getProject().save()
        Monitoring mon1 = f.getMonitoring(proj).save()
        Monitoring mon2 = f.getMonitoring(proj).save()
        // don't need addTo, the getMonitoring method above implicitly adds it to the project
        proj.save(flush: true, failOnError: true).refresh()
    }

    void "results can be limited"() {
        given:
            def params =  new EcosListParams(new GrailsParameterMap ([offset: 0, max:1, sortColumn: 'id', order: 'asc'], null))

        when:
           def results = monitoringService.getProjectMonitorings(params, proj.id)

        then:
            results.totalCount == 2
            results.size() == 1
    }

    void "results can be offset"() {
        given:
            def params1 = new EcosListParams(new GrailsParameterMap ([offset: 0, max:1, sortColumn: 'id', order: 'asc'], null))
            def params2 = new EcosListParams(new GrailsParameterMap ([offset: 1, max:1, sortColumn: 'id', order: 'asc'], null))

        when:
            def results1 = monitoringService.getProjectMonitorings(params1, proj.id)
            def results2 = monitoringService.getProjectMonitorings(params2, proj.id)

        then:
            results1.size() > 0
            results1.id != results2
    }

}
测试数据工厂

Monitoring getMonitoring(Project p) {
    HabitatObjectiveSuccess hos = HabitatObjectiveSuccess.list(max: 1).get(0);

    return new Monitoring(visitDate: new Date(), notes: 'notes', created: new Date(), createdBy: getPerson(),
            lastUpdated: new Date(), lastUpdatedBy: getPerson(), maintActivitiesOccurring: 2,
            maintActivitiesOccurrText: 'maintActivitiesOccurrText', landownerObjectivesMet: 1,
            landownerObjectivesMetText: 'landownerObjectivesMetText', speciesObjectivesMet: 1,
            speciesObjectivesMetText: 'speciesObjectivesMetText', habitatObjectiveSuccess: hos,
            habitatObjectiveSuccessText: 'habitatObjectiveSuccessText', project: p
        )
    }

您好,我可能会混淆grails版本,但是您不应该扩展grails 2.5.5的IntegrationSpec吗?
Monitoring getMonitoring(Project p) {
    HabitatObjectiveSuccess hos = HabitatObjectiveSuccess.list(max: 1).get(0);

    return new Monitoring(visitDate: new Date(), notes: 'notes', created: new Date(), createdBy: getPerson(),
            lastUpdated: new Date(), lastUpdatedBy: getPerson(), maintActivitiesOccurring: 2,
            maintActivitiesOccurrText: 'maintActivitiesOccurrText', landownerObjectivesMet: 1,
            landownerObjectivesMetText: 'landownerObjectivesMetText', speciesObjectivesMet: 1,
            speciesObjectivesMetText: 'speciesObjectivesMetText', habitatObjectiveSuccess: hos,
            habitatObjectiveSuccessText: 'habitatObjectiveSuccessText', project: p
        )
    }