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-test
或 create-integration-test
应该创建一个 spock 规范而不是一个 JUnit 测试。您能否创建一个 spock 规范并尝试对其进行测试。
【参考方案1】:
这个问题是因为“臭名昭著”的 intellij 修复了 idea 12 和 grails 2.3 - 恢复了“sources”和“javadoc” jar 文件,修复了这个问题!
【讨论】:
以上是关于Grails 2.3 使用 IVY 解析器进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章
如何使用企业 Ivy 实例进行 Grails 依赖管理来解决内部工件
Grails:Ivy:Google 代码:如何将 Google 代码依赖项添加到 Grails?
我们可以使用单独的解析器在 ivy ANT 中下载依赖项 jar 吗?