Grails: не может получить доступ к hasMany Relation (нет такого свойства) - PullRequest
0 голосов
/ 28 марта 2019

В настоящее время я работаю над модульными тестами для классов домена, которые я построил.Но по какой-то причине я не могу получить доступ к элементам в реализации hasMany.

Когда я пытаюсь получить доступ к свойству module.exams, он вызывает исключение groovy.lang.MissingPropertyException: Нет такого свойства:экзамены для класса: ch.fhnw.webec.Module.

Я видел бесчисленные примеры, когда люди получают доступ к собственности.Я пробовал экзамены, getExams, addTo и т. Д., Но ни один не работает.

void 'test module relation'() {

    Teacher teacher = new Teacher(prename: "Max", surname: "Mustermann")
    Module module = new Module(name: "Workshop 1", shortName: "WS2", credits: 3, year: 2019, isSpring: true, teacher: teacher)

    Exam exam1 = new Exam(module: module, name: "Prüefung 01", isMsp: false, number: 1, weight: 1, date: Date.parse("yyyy-MM-dd", "2019-03-28"))
    Exam exam2 = new Exam(module: module, name: "Prüefung 01", isMsp: false, number: 1, weight: 1, date: Date.parse("yyyy-MM-dd", "2019-03-28"))

    expect:
    module.exams.count() == 2 // <--  this line
}



package ch.fhnw.webec

class Module {
// ....
    static hasMany = [exams: Exam]
// ...
}

1 Ответ

0 голосов
/ 28 марта 2019

Через ошибку и кучу вопросов в интернете я нашел решение. Вместо того, чтобы удалить вопрос, я решил объяснить решение. Может быть, это может помочь другим, которые тоже пытаются это понять:

Спасибо JeffScottBrown за указание на это: По умолчанию он создает набор. Что означает, что addToXXX работает. Но в моем случае мне нужен был список, и это то, что я должен был добавить:

 class Module {
    static hasMany = [exams: Exam]
    List exams
    // ...
}

Но добавить их недостаточно. При создании объектов вы должны добавить их в этот список с помощью сгенерированного метода addToXY:

    module.addToExams(exam1)
    module.addToExams(exam2)

    assert module.exams.size() == 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...