Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 测试中带有@ToString注释的Stackoverflow异常_Mongodb_Unit Testing_Grails_Stack Overflow_Grails 3.0.9 - Fatal编程技术网

Mongodb 测试中带有@ToString注释的Stackoverflow异常

Mongodb 测试中带有@ToString注释的Stackoverflow异常,mongodb,unit-testing,grails,stack-overflow,grails-3.0.9,Mongodb,Unit Testing,Grails,Stack Overflow,Grails 3.0.9,我在Grails3应用程序中使用MongoDB数据库,在进行一些单一测试时遇到了一些问题 这是我的域名类 @ToString(includeFields = true, includeNames = true, excludes = "dateCreated, lastUpdated, metaClass, sites") @EqualsAndHashCode(excludes = "site") class Campaign { static mapWith = "mongo"

我在Grails3应用程序中使用MongoDB数据库,在进行一些单一测试时遇到了一些问题

这是我的域名类

@ToString(includeFields = true, includeNames = true, excludes = "dateCreated, lastUpdated, metaClass, sites")
@EqualsAndHashCode(excludes = "site")
class Campaign {

    static mapWith = "mongo"

    ObjectId id
    String name
    Boolean manualActive
    Date startDate
    Date endDate

    static belongsTo = [site:Site]

    static constraints = {
        name size: 1..255, blank:false

        manualActive nullable:true, validator: {val, obj->
            (val != null && obj.startDate == null && obj.endDate == null) || (val == null && obj.startDate != null)
        }
        startDate nullable:true, validator: {val, obj->
            (val != null && obj.manualActive == null) || (val == null && obj.manualActive != null)
        }
        endDate nullable:true, validator: {val, obj ->
            (val != null && obj.startDate != null) || (val == null)
        }
    }
}
我还使用build test data plugin来简化测试的数据创建,如果我尝试以下操作,我会收到StackoverflowException:

@TestFor(CampaignService)
@Mock([Site, Campaign])
@Build([Site, Campaign])
class CampaignServiceSpec extends Specification {

    def setup() {
    }

    def cleanup() {
    }

    void "Test that isSameCampaign throws a ForbiddenException if no site is given"() {
        given:
            def campaign = Campaign.build(id:new ObjectId(), manualActive:true)
            def site = null
        when:
            service.isSameSite(site, campaign)
        then:
            thrown ForbiddenException
    }

    void "Test that isSameCampaign throws a ForbiddenException if it mismatches from the campaign"() {
        given:
            def site = Site.build(id:new ObjectId(), )
            def campaign = Campaign.build(id:new ObjectId(), manualActive:true)
        when:
            service.isSameSite(site, campaign)
        then:
            thrown ForbiddenException
    }

    void "Test that isSameCampaign does NOT throw a ForbiddenException if no campaign is given"() {
        given:
        def site = Site.build(id:new ObjectId(), )
        def campaign = Campaign.build(id:new ObjectId(), site:site,manualActive:true)
        when:
            service.isSameSite(site, campaign)
        then:
            notThrown ForbiddenException
    }
}
但是,如果我从域类中删除de@ToString()注释并实现自己的ToString方法,测试运行正常。
知道为什么会发生这种情况吗?它可能与ObjectId字段有关吗?

这通常是一个无限循环。你能添加stacktrace吗?stacktrace很可能很长,但是周期很长,所以可以随意缩短重复部分,但一定要包括至少几个。stacktrace没有说太多。。。与objectId.toString()相关的just和stackoverflow有时(但不总是)通常是一个无限循环。你能添加stacktrace吗?stacktrace很可能很长,但是周期很长,所以可以随意缩短重复部分,但一定要包括至少几个。stacktrace没有说太多。。。just和stackoverflow有时(但不总是)与objectId.toString()相关