Grails 单元测试中的自定义hamcrest匹配器

Grails 单元测试中的自定义hamcrest匹配器,grails,junit,classloader,hamcrest,matcher,Grails,Junit,Classloader,Hamcrest,Matcher,在实现Grails中使用的自定义hamcrest匹配器时遇到问题。使用my matcher运行测试失败,原因是: java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V 在谷歌搜索了一下之后,这似乎是由加载库的顺序引起的:JUnit和Hamcrest。我已将以下依赖项添加到我的BuildConfig.groovy中: dep

在实现Grails中使用的自定义hamcrest匹配器时遇到问题。使用my matcher运行测试失败,原因是:

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'
}
根据我能够找到的说明,可以通过确保hamcrest类在JUnit类之前加载来解决这个问题。但我不知道如何在Grails中实现这一点,也不知道如何以任何其他方式解决这一问题


使用Grails2.2.1这取决于您使用的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之前,JUnit发行版中包含了hamcrest库的一个版本。4.11不再是这种情况,有时类版本之间会出现不匹配。

就是这样!只需要记住在更改后刷新依赖项。