2015-11-25 1 views
2

Обычно я заканчивал писать тестовые примеры для домена, записывая их для ограничений и любых настраиваемых методов (созданных нами в приложении), поскольку мы знаем, что мы не должны проверять очевидные.Grails: Spock: Unit testing Gorge domain class hooks

Но когда мы начали использовать плагин плагина, мы обнаружили, что наша доменная строка кода не полностью покрыта, что было связано с перехватами gorm (onInsert, beforeUpdate), для которых мы никогда не писали тестовые примеры.

Есть ли способ, который мы можем проверить. Одним из возможных способов, которые кажутся очевидными, но не подходящими, является вызов другого метода (содержащего весь код, который был ранее на крючках) внутри этих крючков, и проверить этот метод только и быть беззаботным для крючков.

Любые решения ...

Редактировать

Пример кода в домене, который я хочу юнит-тест:

class TestDomain{ 
    String activationDate 
    def beforeInsert() { 
     this.activationDate = (this.activationDate) ?: new Date()//first login date would come here though 
     encodePassword() 
    } 
} 

Как блок-тест beforeInsert или я закончу ли запись теста интеграции?

+0

Может быть, вы можете разместить пример код и соответствующий тест блока? – kazanaki

+0

@kazanaki, см. Мое редактирование выше. –

+0

Хорошо. Но где же единичный тест? Что вы хотите проверить? Сам метод beforeInsert или тот факт, что Grails называет его, когда вы ожидаете его вызова? – kazanaki

ответ

3

Возможно, тестовый модуль, как:

import grails.test.mixin.TestFor 

@TestFor(TestDomain) 
class TestDomainSpec extends Specification { 
    def "test beforeSave"() { 
     given: 
      mockForConstraintsTests(TestDomain) 
     when: 
      def testDomain = new TestDomain().save(flush:true) 
     then: 
      testDomain.activationDate != null 
    } 
}