2012-01-02 4 views
2

Моя среда разработки заключается в следующем:Grails динамических методов поиска на доменных классов не видны через плагин проекты

Grails версия: 1.3.7.RELEASE

Выполните следующие действия:

  1. mkdir GrailsProjects
  2. cd GrailsProjects
  3. grails create-plugin grails-domain
  4. cd grails-domain
  5. grails create-domain-class Book
  6. cd ..
  7. grails create-plugin grails-service
  8. cd grails-service
  9. grails create-service BookService
  10. Добавить

    grails.plugin.location."grails-domain" = "../grails-domain" 
    

    в верхней части файла BuildConfig.groovy в grails-service проекта

  11. Использование текстового редактора изменить содержимое файла Book.groovy к:

    package grails.domain 
    
    class Book { 
        String name 
    
        static constraints = { 
        } 
    } 
    
  12. Измените содержание файл BookService.groovy:

    package grails.service 
    
    import grails.domain.Book 
    
    class BookService { 
        static transactional = true 
    
        def someMethod() { 
         def book = Book.findByName("Fooled by randomness") 
        } 
    } 
    

На попытке вызвать метод BookService.someMethod, Grails не смог найти способ findByName на Book. Book.name видна внутри BookService.someMethod, что указывает на то, что проект плагина grails-service может разрешить код в проекте плагина grails-domain.

Этапы в точности соответствуют указанным выше; никаких дополнительных шагов не было выполнено.

Является ли это ожидаемым поведением с проектами плагинов Grails? Есть ли другой способ разделить классы доменов и сервисов с Grails?

+0

Я следил за вашими строками по строкам. Кроме того, я добавил контроллер в grails-service, чтобы я мог легко вызвать мой метод сервиса через run-app. Я выполнил запуск приложения из плагина grails-service и работал, как ожидалось. – Gregg

ответ

1

Thanks @david. Я не дошел до того, что плагины были интегрированы с веб-приложением, поэтому я не тестировал их с контроллерами. Я просто пытался проверить концепцию плагинов с помощью модульных тестов. Я вызывал BookService.someMethod от BookServiceTests, который был создан автоматически, когда я создал службу.

Я узнал, что классы домена должны быть издевательствами во время модульного тестирования, чтобы получить все функциональные возможности GORM, включая динамические искатели. Я добавил mockDomain(Book, []) в BookServiceTests.setUp, чтобы получить модульные тесты.

Теперь все работает отлично.

+0

Если вы используете Grails 2.0, используйте аннотацию '@ Mock'. – manish

Смежные вопросы