Исключение Stackru с аннотацией @ToString в тесте

Я использую базу данных MongoDB в приложении Grails 3, и у меня возникают некоторые проблемы при выполнении некоторых унитарных тестов.

Это мой класс домена

@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, чтобы упростить создание данных для тестов, и если я попробую что-то вроде следующего, я получу StackruException:

@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, тесты выполняются нормально. Любые идеи, почему происходит это stackruException? Может ли это быть связано с полем ObjectId?

0 ответов

Другие вопросы по тегам