тестирование проблем валидатора класса домена Grails - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть валидатор внутри класса домена, и у меня проблема с тестированием контроллера на Lagerort.

com.example.xyz.LagerortControllerSpec > Test the update action performs an update on a valid domain instance FAILED
java.lang.IllegalStateException: Either class [com.example.xyz.Lagertyp] is not a domain class or GORM has not been initialized correctly or has already been shutdown. Ensure GORM is loaded and configured correctly before calling any methods on a GORM entity.

Если я опускаю валидатор, все тестируется нормально, но это не то, что я хочу.

Класс домена:

 class Lagerort {

     String lagerort
     Lagertyp lagertyp
     String beschreibung

     static auditable = true

     static constraints = {
         lagerort(nullable: false, blank: false, unique: true)
         lagertyp(nullable: false, blank: false, validator: { val, obj ->
             // Only ONE Lagerort may be "Schrott"
             if (Lagertyp.count() > 0) {
                 def _LAGERTYPSTRING="Schrott"
                 Lagertyp lagertypschrott = Lagertyp.findByLagertyp(_LAGERTYPSTRING)
                 if (obj.lagertyp == lagertypschrott && Lagerort.countByLagertyp(lagertypschrott)>0) return ['lagerortschrottunique',_LAGERTYPSTRING]
             }
         })
         beschreibung(nullable: false, blank: false)

     }

     String toString(){lagerort}
 }

Часть testCompile зависимостей в build.gradle выглядит следующим образом:

testCompile "org.grails:grails-plugin-testing"
testCompile "org.grails.plugins:geb"
testCompile "org.grails.plugins:hibernate5"
testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1"
testRuntime "net.sourceforge.htmlunit:htmlunit:2.18"

Я уже пытался создать несколькообъекты типа Lagertyp в части настройки тестов контроллера, так что Lagertyp.count() > 0 будет верным для валидатора, но это тоже не помогло.

PopulateValidParams LagerortControllerSpec / test выглядит следующим образом:

def populateValidParams(params) {
    assert params != null
    params["lagerort"] = 'Fa.Conrad'
    params["lagertyp"] = ["lagertyp": 'Fa.Conrad', "beschreibung": 'Motor befindet sich bei Fa.Conrad']
    params["beschreibung"] = 'in Reparatur bei Fa. Conrad'
}

LagerortController: https://pastebin.com/PpZ5zqMm

Тест для LagerortController: https://pastebin.com/pxZ6UeVK

Есть идеи?

1 Ответ

0 голосов
/ 15 ноября 2018

Нашел решение, мне пришлось также насмехаться над Lagertyp, вот так:

@Mock([Lagerort,Lagertyp])

Кажется, мне нужно включить все классы домена, которые являются частью тестов, в список @Mock, дажете, на которые ссылаются косвенно.

...