Как сделать тест неудачным для отношений один-к-одному в Grails? - PullRequest
1 голос
/ 25 декабря 2010

Я хочу наладить отношения один-на-один в Граале и проверить их.Итак, я создал два класса.

Ниже приведены два класса.


class Book {

  String title
  Date releaseDate
  String ISBN

  static belongsTo = [person:Person]
}

class Person {

  Book book;

  String name
  Integer age
  Date lastVisit

  static constraints = {
    book unique: true  // "one-to-one". Without that = "Many-to-one".
  }

}

И напишите тест:


public void testOneToOne() {
 Person person1 = new Person(name:"person_b1", age: 99, lastVisit: new Date())
      Person person2 = new Person(name:"person_b2", age: 100, lastVisit: new Date())

      Book oneBook = new Book(title:"somebook", ISBN: "somebook1", releaseDate: new Date())

      person1.setBook(oneBook)
      person1.save()

      person2.setBook(oneBook)
      person2.save()  // ! c'est impossible pour 'one-to-one'
}

Так что если это один на один, я НЕ смогу сохранить person2 в БД, потому что одна книга не можетбыть связан с более чем одним человеком.Так должно ли я получить исключение, тогда как person2.save () тогда?

У меня нет.И человек2 не сохраняет в БД.Так как я могу это проверить - как сделать тест неудачным?

1 Ответ

0 голосов
/ 25 декабря 2010

Ограничение unique используется, чтобы гарантировать, что один экземпляр класса может быть присоединен только к одному экземпляру другого класса: http://grails.org/doc/latest/ref/Constraints/unique.html

В вашем примере вы объединяете один экземпляр Book с двумя экземплярами Person, т. Е. Связь один ко многим - поэтому имеет смысл, что сохранение не удастся. Если вы осмотрите свойство person2.errors.allErrors, вы увидите, что ограничение Person.book.unique было нарушено.

Вот как должен выглядеть тест сопоставления один-к-одному - person2 нужна ее собственная книга, поскольку вы заявили, что книга может принадлежать только одному человеку с ограничением unique.

   public void testOneToOne() {
        Person person1 = new Person(name:"person_b1", age: 99, lastVisit: new Date())
        Person person2 = new Person(name:"person_b2", age: 100, lastVisit: new Date())

        Book oneBook = new Book(title:"somebook", ISBN: "somebook1", releaseDate: new Date())
        Book twoBook = new Book(title:"anotherbook", ISBN: "somebook2", releaseDate: new Date())

        person1.setBook(oneBook)
        assertNotNull(person1.save())

        person2.setBook(twoBook)
        assertNotNull(person2.save())
  }

Похоже, что вы на самом деле хотите ассоциацию один (книга) со многими (людьми), так что просто оставьте ограничение unique.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...