Grails - тестирование пользовательского валидатора на проблему класса домена - PullRequest
1 голос
/ 20 августа 2010

Я изучаю Grails из Grails - начало работы с книгой Джейсона Рудольфа. Мой класс домена выглядит так:

class Race {

  String name;
  Date startDateTime
  String city
  String state
  Float distance
  Float cost
  Integer maxRunners = 10000

  static hasMany = [registrations: Registration]

  static constraints = {
    name(maxSize: 50, blank: false)
    startDateTime(validator: {
      return it > new Date()
    })
    city(maxSize: 30, blank: false)
    state(inList: ['GA', 'NC', 'SC', 'VA'], blank: false)
    distance(min: 3.1f, max: 100f)
    cost(min: 0f, max: 999.99f)
  }

  String toString() { "${this.name} : ${this.city}, ${this.state}" }
}

Я хочу проверить пользовательскую проверку поля startDateTime. Тест выглядит так:

class RaceTests extends GrailsUnitTestCase {
  protected void setUp() {
    super.setUp()
  }

  protected void tearDown() {
    super.tearDown()
  }

  void testCustomDateValidation() {
    def race = new Race()
    race.startDateTime = null
    assertFalse(race.validate())
  }
}

Тест похож на тот, который я упоминал ранее. Но я получаю

groovy.lang.MissingMethodException: No signature of method: racetrack.Race.validate() is applicable for argument types: () values: []

Я застрял и не нашел никакого решения: / Любая помощь будет оценена.

Ответы [ 2 ]

5 голосов
/ 20 августа 2010

Вам не хватает вызова mockForConstraintsTests ().Обычный шаблон заключается в том, чтобы сделать это в setUp ()

protected void setUp() {
  super.setUp()
  mockForConstraintsTests(Race)    
}

Подробнее: http://mrhaki.blogspot.com/2009/04/unit-testing-constraints-in-domain.html

3 голосов
/ 20 августа 2010

Вы не должны использовать модульные тесты или макеты для проверки классов домена.Grails создает модульный тест для классов доменов, и это следует изменить.Переместите класс в тот же пакет и папку в тесте / интеграции и измените базовый класс на GroovyTestCase, и вы получите надлежащий тест, который работает с базой данных в памяти и проверяет постоянство, а не среду для насмешек.

...