Ошибка компиляции в интеграционном тестировании с электронной книгой «Начало работы с Grails» - PullRequest
3 голосов
/ 22 мая 2011

Я просматриваю книгу «Начало работы с Grails» и попал в стену с главой 4 (Валидация) на странице 38 (фактическая страница 50).Вот код:

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

def code = badField?.codes.find { 
   it == 'race.startDate.validator.invalid'
}

Как я уже сказал, это не влияет на основное исполнение, но было просто любопытно, прав ли я или это что-то в Groovy, с которым я еще не сталкивался.Я положил то, что, как я думал, должно быть ниже.

package racetrack

import groovy.util.GroovyTestCase


class RaceIntegrationTests extends GroovyTestCase { 

    void testRaceDatesBeforeToday() {
    def lastWeek = new Date() - 7 
    def race = new Race(startDate:lastWeek) 
    assertFalse "Validation should not succeed", race.validate() 
    // It should have errors after validation fails 
    assertTrue "There should be errors", race.hasErrors()

    println "\nErrors:" 
    println race.errors ?: "no errors found"

    def badField = race.errors.getFieldError('startDate') 
    println "\nBadField:" 
    println badField ?: "startDate wasn't a bad field" 
    assertNotNull "Expecting to find an error on the startDate field", badField

    def code = badField ?: codes.find { 
        it == 'race.startDate.validator.invalid'
    } 
    println "\nCode:" 
    println code ?:"the custom validator for startDate wasn't found" 
    assertNotNull "startDate field should be the culprit", code
    }
}

, где, при запуске "grails test-app", я получаю следующее:

Error executing script TestApp: java.lang.RuntimeException: Could not load class in test type 'integration'
java.lang.RuntimeException: Could not load class in test type 'integration'
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:391)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
at gant.Gant.withBuildListeners(Gant.groovy:427)
at gant.Gant.this$2$withBuildListeners(Gant.groovy)
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:415)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.executeTargets(Gant.groovy:590)
at gant.Gant.executeTargets(Gant.groovy:589)
Caused by: java.lang.RuntimeException: Could not load class in test type 'integration'
at _GrailsTest_groovy$_run_closure4.doCall(_GrailsTest_groovy:261)
at _GrailsTest_groovy$_run_closure4.call(_GrailsTest_groovy)
at _GrailsTest_groovy$_run_closure2.doCall(_GrailsTest_groovy:228)
at _GrailsTest_groovy$_run_closure1_closure21.doCall(_GrailsTest_groovy:187)
at _GrailsTest_groovy$_run_closure1.doCall(_GrailsTest_groovy:174)
at TestApp$_run_closure1.doCall(TestApp.groovy:82)
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
... 10 more

Книга использует Grails 1.2.x и я использую 1.3.x и уже заметили некоторые расхождения между версиями (ничего непреодолимого), так что это может быть что-то подобное, но я не могу понять это.Быть новичком в Groovy и Grails не помогает!: -D

Может кто-нибудь объяснить, что я могу сделать, чтобы пройти через это?

Ответы [ 5 ]

5 голосов
/ 27 марта 2014

Я только что получил эту ошибку, моя причина была в том, что мой тестовый класс был в неправильной упаковке.

Я не смог найти способ получить более четкое описание проблемы, даже при запуске с параметром --stacktrace больше не показывалось информации.

Похоже, что эта ошибка может быть вызвана различными проблемами компиляции, возможно?

3 голосов
/ 19 декабря 2013

У меня была такая же проблема (хотя я использую Grails 2.3.4) - я исправил ее, явно включив

import racetrack.Race

вместо

package racetrack

Интересно, что после того, как я попробовал это, я закомментировал это, и все по-прежнему работало - пока я не сделал очистку Грааля. Тогда это снова не удалось. Подозреваю что-то не совсем 100% в автокомпиляции grails / groovy.

2 голосов
/ 19 августа 2014

Я столкнулся с этой проблемой с Grails 2.4.2.Причиной было то, что у меня был тестовый файл с именем FooTest, но класс с именем FooTest ** s **.

Запуск grails test-app --stacktrace помог найти класс-нарушитель.

0 голосов
/ 29 июня 2016

, пожалуйста, убедитесь, что имя вашего пакета указано правильно, указанная выше ошибка означает, что он пытается запустить тест, но поскольку имя пакета указано неверно, он не может найти файл с этим конкретным именем пакета.

0 голосов
/ 26 декабря 2011

Прежде всего, я не думаю, что вам нужно, чтобы это был «интеграционный» тест.Поместите его в структуру каталогов 'src / test / unit / ...'.Во-вторых, если вы хотите протестировать метод Grails 'validate ()', который будет внедрен средой Grails на основе вашего блока 'constraints', вы должны заставить тест расширять 'GrailsUnitTest' и вызывать 'mockDomain (Race)) 'в первой строке вашего метода модульного тестирования.Если это неясно, напишите мне, и я отправлю код, но я думаю, что ваша книга имеет довольно хороший пример этого.Вот некоторый код «свободной руки», который может это исправить ...

class RaceTests extends GrailsUnitTest {

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