2

难以实现在 Grails 中使用的自定义 hamcrest 匹配器。使用我的匹配器运行测试失败:

java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V

经过一番谷歌搜索,这似乎是由加载库的顺序引起的:JUnit 和 Hamcrest。我在 BuildConfig.groovy 中添加了以下依赖项:

dependencies {
  test 'org.hamcrest:hamcrest-all:1.3'
}

根据我能够找到的说明,这可以通过确保在 JUnit 类之前加载 hamcrest 类来解决。我不知道如何在 Grails 中实现这一点,或者如何以任何其他方式解决这个问题。

使用 Grails 2.2.1

4

1 回答 1

5

这取决于您使用的 JUnit 版本。您可以通过查看来检查这一点lib/junit/junit/jars。我认为默认情况下这是 4.10。如果是这样,请升级到 4.11。您可以通过在 BuildConfig.groovy 中明确指定它来做到这一点,我相信:

dependencies {
  test 'junit:junit:4.11'
  test 'org.hamcrest:hamcrest-all:1.3'
}

作为解释,在 4.11 之前,一个版本的 hamcrest 库包含在 JUnit 发行版中。4.11 不再是这种情况,有时您会遇到类版本之间的不匹配。

于 2013-08-11T19:52:38.580 回答