Какой объем Grails GORM нужно протестировать?

Существует ли «лучшая практика» или стандарт де-факто, определяющий, какую часть функциональности GORM следует тестировать в модульных/функциональных тестах?

Я считаю, что большую часть тестирования домена, вероятно, следует выполнять как функциональные тесты, чтобы вы получили полную среду Grails. Но что вы тестируете? Вставляет, обновляет, удаляет? Тестируете ли вы ограничения, даже если они, вероятно, были более тщательно протестированы в выпуске Grails?

Или вы просто предполагаете, что GORM делает то, что должен делать, и перемещаетесь в другие части приложения?


person Lloyd Meinholz    schedule 05.05.2010    source источник


Ответы (2)


Мое общее правило — проверять то, что я пишу. Поэтому, если я пишу собственные методы (или замыкания), я буду их тестировать. Это правило также означает, что я буду тестировать ограничения, так как я написал ограничения. Для этого я использую метод mockForConstraintsTests() в GrailsUnitTestCase.

Пример блока ограничений:

static constraints = {
      location(blank:true, nullable:true)
      make(blank:false, nullable:false)
      name(blank:false, nullable:false)
      serviceTag(nullable:true)
      purchaseDate(blank:false, nullable:false)
      checkedDate(blank:false, nullable:false)
      warrantyExpirationDate(nullable:true)
      notes(blank:true, nullable:true)
    }

У меня был бы следующий модульный тест ограничений:

void test_null_constraints_are_checked() {
      mockForConstraintsTests(Hardware)
      def hardware = new Hardware()
      assertFalse hardware.validate()

      assertEquals 4, hardware.errors.getFieldErrorCount()
      assertEquals "nullable", hardware.errors["name"]
      assertEquals "nullable", hardware.errors["checkedDate"]
      assertEquals "nullable", hardware.errors["purchaseDate"]
      assertEquals "nullable", hardware.errors["make"]
}

Это сразу же уловит любые опечатки в моих ограничениях.

Я не тестирую сохранения, создания, обновления, удаления на домене; если они не сработают, то у меня будут большие проблемы!

person zentuit    schedule 05.05.2010
comment
Вы бы когда-нибудь тестировали отношения 1-M и т. д.? - person Lloyd Meinholz; 06.05.2010
comment
Не могу сказать, что тестировал их непосредственно в части. Обычно я подбираю их на уровне интеграции. - person zentuit; 06.05.2010

Лично я бы проверил любые сложные отношения, которые мне не на 100% удобно настраивать, и любые методы доступа, для которых перезаписывается реализация по умолчанию.

person Armand    schedule 05.05.2010
comment
Это звучит разумно, я просто беспокоюсь, что тестирую сам GORM, а не свой код. В каком-то смысле мои сопоставления являются частью моего кода, и я это тестирую. - person Lloyd Meinholz; 06.05.2010