关于域类的Grails动态查找器方法在插件项目中不可见

时间:2012-01-02 16:57:11

标签: grails gorm

我的开发环境如下:

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项目

  11. 中文件grails-service的顶部
  12. 使用文本编辑器,将文件Book.groovy的内容更改为:

    package grails.domain
    
    class Book {
        String name
    
        static constraints = {
        }
    }
    
  13. 将文件BookService.groovy的内容更改为:

    package grails.service
    
    import grails.domain.Book
    
    class BookService {
        static transactional = true
    
        def someMethod() {
            def book = Book.findByName("Fooled by randomness")
        }
    }
    
  14. 在尝试调用方法BookService.someMethod时,Grails无法在findByName上找到Book方法。 Book.name内可以看到BookService.someMethod,表示grails-service插件项目能够解析grails-domain插件项目中的代码。

    步骤完全如上所列;没有执行其他步骤。

    这是Grails插件项目的预期行为吗?是否有不同的方法将域和服务类与Grails分开?

1 个答案:

答案 0 :(得分:1)

谢谢@david。我还没有达到插件与Web应用程序集成的程度,所以我没有使用控制器进行测试。我只是试图使用单元测试来测试插件的概念。我从BookService.someMethod调用了BookServiceTests,这是我在创建服务时自动创建的。

我发现在单元测试期间必须模拟域类,以获得所有GORM功能,包括动态查找器。我将mockDomain(Book, [])添加到BookServiceTests.setUp以使单元测试正常运行。

现在一切正常。