在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
答案 0 :(得分: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不再是这种情况,有时您会在类版本之间出现不匹配。