Grails 2.3 使用 IVY 解析器进行单元测试

Posted

技术标签:

【中文标题】Grails 2.3 使用 IVY 解析器进行单元测试【英文标题】:Grails 2.3 unittesting with IVY resolver 【发布时间】:2013-09-24 13:19:56 【问题描述】:

如果我使用 grails 2.3 执行 create-app,创建一个简单的 spock 单元测试,并更改 grails 配置以使用 ivy 解析器:

grails.project.dependency.resolver = "ivy" // or maven

单元测试崩溃并出现以下错误:

| Running without daemon...
| Running 1 unit test...
| Running 1 unit test... 1 of 1
| Error Error running unit tests: org/hamcrest/SelfDescribing (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.)
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1259)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1259)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1259)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
        ... 7 more
| Error Error running unit tests: org/hamcrest/SelfDescribing
| Running 1 unit test....
| Running 1 unit test.....
| Tests FAILED  - view reports in C:\ivytry\foobar\target\test-reports

任何想法如何解决这个问题?我们需要使用 Ivy 的原因是 Maven 似乎不支持自定义远程存储库,我需要在其中指定用户名/密码。 -除了在 buildconfig 中,但我不希望我的凭据受源代码控制:)

编辑(已解决):参见 cmets!

【问题讨论】:

Grails 2.3.0 中的拇指规则:- 运行dependency-report 以查看是否存在任何冲突。 有一些。但与测试无关 - 至少我无法弄清楚..Hamcrest 没有出现在依赖报告中。但这意味着,该测试不适用于 Grails 2.3 和 ivy 解析器的 OOTB?看起来很奇怪! 我可以在带有 ivy 解析器的示例 grails 2.3 应用程序的测试报告中看到 hamcrest。通常,它捆绑在 spock 中(2.3 中的默认测试 f/w),但我在您的使用中没有看到 spock。你会得到一个NoClassDefFoundError,这意味着你有可用的 hamcrest,但它与其他东西发生冲突。显示BuildConfig Buildconfig 是默认的。没有改变“创建应用程序”的任何东西。唯一改变的是依赖解析器......我在这里没有得到它,但是上面应该足够了。 如果 BuildConfig 是默认的,那么 create-unit-testcreate-integration-test 应该创建一个 spock 规范而不是一个 JUnit 测试。您能否创建一个 spock 规范并尝试对其进行测试。 【参考方案1】:

这个问题是因为“臭名昭著”的 intellij 修复了 idea 12 和 grails 2.3 - 恢复了“sources”和“javadoc” jar 文件,修复了这个问题!

【讨论】:

以上是关于Grails 2.3 使用 IVY 解析器进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

Grails 未对 Artifactory 进行身份验证

如何使用企业 Ivy 实例进行 Grails 依赖管理来解决内部工件

Grails:Ivy:Google 代码:如何将 Google 代码依赖项添加到 Grails?

我们可以使用单独的解析器在 ivy ANT 中下载依赖项 jar 吗?

如何使用 Ivy iBiblio 解析器连接到受 SPNEGO 保护的 Maven 存储库?

如何在 Grails 2.4 中外部化 Maven 凭证