【问题标题】:Spock/Grails - Groovy:unable to resolve class grails.test.mixin.TestFor and unable to resolve class spock.lang.SpecificationSpock/Grails - Groovy:无法解析类 grails.test.mixin.TestFor 并且无法解析类 spock.lang.Specification
【发布时间】:2015-12-10 14:08:48
【问题描述】:

我正在为我的插件 project-plugin 创建一个 Spock 测试,我的主要项目名称是 main-project,它使用 project-plugin 作为插件。因此,当我为我的插件创建 Spock 测试时,它抛出的错误意味着它的警告 project-plugin 由于下面的类而有错误。

为插件创建 Spock 测试与为主项目创建 Spock 测试不同。

例如,我创建了一个新的示例项目并为服务创建了 spock 测试,该服务正常运行且没有任何错误。

import grails.test.mixin.TestFor
import spock.lang.Specification
@TestFor(DataImportService){

}

我也尝试过使用命令 grails> refresh-dependencies -Dplugins.useInline=true 刷新依赖项 Dependencies refreshed. 但仍然是同样的错误。

我应该使用main-projectplugin-project 运行我的单元测试用例吗?

如何解决这个问题。

谢谢。

【问题讨论】:

    标签: grails spock


    【解决方案1】:

    添加到gradle:

    testCompile "org.grails:grails-test-mixins:3.3.0"
    

    来源: https://grails-plugins.github.io/grails-test-mixin-plugin/latest/guide/index.html

    【讨论】:

      【解决方案2】:

      我为我工作的应用程序中的内联插件创​​建了许多 Spock 测试(单元和集成)。基本上,应用程序是一个外壳和一些就地插件——应用程序本身非常简单。

      组织非常简单。每个应用程序中的 BuildConfig.groovy 使用 grails.plugin.location.'plugin-name' = '../../plugins/plugin-name' 选择它所组成的插件

      +- applications
      |     |
      |     +- app1
      |     +- app2
      |     +- app3
      |
      +- plugins
            |
            +- plugin1 
            +- plugin2 (there are > 30 plugins in total)
      

      手动或通过 IntelliJ IDE 创建测试并没有什么特别之处。测试都在 application > test > [integration | unit] 文件夹(是的,我应该重构以使代码覆盖率正常工作)。 适用于域类、控制器或服务。 (Grails 2.4.3 / 2.4.5)

      import grails.test.mixin.TestFor
      import grails.test.mixin.Mock
      import spock.lang.specification
      import spock.lang.Unroll
      
      @TestFor(SomeService)
      @Mock([OtherService])
      class SomeService extends Specification {
          def "some method"() {
              given:
                  // setup
              when:
                  // action
              then:
                  // test outcomes
              cleanup:
                  // undo any metaClassing, etc
          }
      }
      

      【讨论】:

      • 您的意思是说为 projectplugins 编写 Spock 测试没有区别
      • 当我创建一个新的示例项目并编写运行正常的 spock 测试但我的官方现有项目提供class resolution error
      • 什么 grails 版本,以及主项目的 BuildConfig 是什么样的?那里可能有什么东西。
      • 我使用的是 2.4.4,它与默认相同,需要额外的插件
      【解决方案3】:

      我有同样的错误。在我尝试回滚不相关插件的更新之前,我的 Spock 单元测试一直有效。我不确定如何,但 IntelliJ 停止识别我项目的任何插件。

      这是我认为解决的问题:

      • 在资源管理器中,备份并删除文件夹C:\\[my project root]\\work\\projects\\[project name]
      • 在 IntelliJ IDEA (15.0.4) 中,Build->Rebuild Project
      • 然后File->Close Project 并重新打开项目。

      最后一步终于成功了。以下是我尝试过的所有其他方法,以防万一自行不起作用:

      • grails clean
      • grails refresh-dependencies
      • 强制 svn 更新到 HEAD
      • 在 IntelliJ 中,File->Invalidate Caches / Restart...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多